はじめに
現在、業務にてモノリシックなwebアプリケーションのリファクタリングを担当している。
API設計の技術本を漁っていたところ、「モノリシックからマイクロサービスへとアーキテクチャを進化させるための実践的手法」というサブタイトルに惹かれて手に取ってみた。
対象者
この記事は下記のような人を対象にしています。
- API設計に興味のある駆け出しエンジニア
- 実装だけでは物足りなくなってきた中級エンジニア
- たまたまチームリーダーをやっているエンジニア
結論
- オライリー本は最後の章から読め
- 「この本でモノリスをマイクロサービス化するノウハウをマスターした!」にはならない
- ただし、マイクロサービス化するために勉強すべき項目が浅く広く知れる
- SREやアーキテクトに必要な知識が多く、担当レベルのバックエンドエンジニアが読むには少しハードルが高かったかも...
イントロダクション
- 想定読者が定義されていてありがたい
- 開発者
- 開発の担当者レベル
- 偶発的アーキテクト
- 開発のチームリーダーレベル
- ソリューション/エンタープライズアーキテクト
- 肩書きに「アーキテクト」が入るベテラン開発者
- 開発者
- C4ダイアグラム
- コンテキスト図
- コンテナ図
- コンポーネント図
- コード図
- ADR:Architecture Decision Record (アーキテクチャ決定記録)
- Status
- Context
- Decision(決定事項)
- Consequence(結果)
1章 APIの設計・構築・仕様化
- RESTful API
- リチャードソンの成熟度モデル
- レベル0: HTTP/RPC
- レベル1: リソース
- レベル2: 動詞(メソッド)
- レベル3: ハイパーメディアコントロール
- RPC (Remote Procedure Call)
- RESTはステートレスだが、RPCはそうではない
2章 APIのテスト
- テストの4象限
- Q1:単体テストとコンポーネントテスト
- Q2:機能テスト
- Q3:探索的テスト
- Q4:技術的観点のテスト
- テストピラミッド
- UIテスト
- サービステスト
- 単体テスト
- コントラクトテスト
- コンポーネントテスト
- 統合テスト
- E2Eテスト
3章 APIゲートウェイ:外部トラフィック管理
- リバースプロキシ
- ロードバランサ
- APIゲートウェイ
4章 サービスメッシュ:サービス間トラフィック管理
- 正直、自分の理解が追いつかなかった
- SRE領域の知識のため、バックエンドエンジニアの自分にどこまで必要なのか、理解できなかった
5章 APIの展開とリリース
- デプロイ:新機能が本番環境に導入されること
- リリース:エンドユーザーが新機能を使えるようになり、サービス影響が出ること
- フィーチャーフラグやダークローンチを使うことでデプロイ頻度を増やせる
- リリース戦略
- カナリアリリース
- トラフィックミラーリング(ダークローンチ)
- ブルーグリーン戦略
6章 セキュリティ運用:脅威モデリング
- 目標の特定
- 情報収集
- システムを分解
- 脅威を特定(STRIDE)
- 脅威のリスク評価(DREAD)
- 検証
7章 APIの認証と認可
- OAuth2:トークンを利用した認可フレームワーク
- いわゆる、「SNSでログイン」機能
- エンドユーザーが毎回ユーザー名やパスワードを入力しなくても認可できる
- Json Web Tokens (JWT):事実上の標準トークン
- Json Web Signatures (JWS):デジタル署名され、トークンの内容が変更された場合、トークンが無効になる
- Json Web Encryption (JWE):トークンを暗号化する
- トークンをDB検索する必要がないため、パフォーマンスに優れる
- PKCE:認可コードグラントに追加し、盗聴リスクを低減する
- リフレッシュトークン:現在のアクセストークンが有効期限切れになった時、追加のトークンを要求することで、ユーザー名とパッスワードの入力を防ぐ
- OIDC(OpenID Connect):openidを利用し、ユーザー情報を取得する
- SAML:シングルサインオンに利用
8章 API駆動アーキテクチャへのアプリケーションの再設計
- 変化に強いシステムとは
- 凝集性を高める→コードが理解しやすくなる
- 租結合を促進する→テストでモックを利用しやすくなる
- 最終アーキテクチャの選択肢
- モノリス
- 「大きな泥団子」でないことが前提
- DDDやヘキサゴナルアーキテクチャを利用すべき
- サービス指向アーキテクチャ(SOA)
- ベンダが提供するミドルウェアの利用は避けるべき
- マイクロサービス
- DDDを用いてAPIと基盤の境界を設計する
- 関数型アーキテクチャ
- 結合度の設定が難しい
- モノリス
- システムをモジュールに分解する
- モノリスからマイクロサービスへを読もう
9章 クラウド環境への移行
- この章は短かった+興味が薄かったのでさっと読み飛ばした
10章 総括
- 各章のケーススタディを振り返りつつ、まとめられている
- この章を最初に読むと、納得度が高まる気がする
- オブジェクト設計スタイルガイドを読んだ時にも思ったが、オライリー本は最後の総括章から読むのが定番なのか...?
おわりに
「マスタリングAPIアーキテクチャ」についてまとめました。