マイクロサービスアーキテクチャ
O`REILLY発行の マイクロサービスアーキテクチャ を読んだのでその内容を軽くまとめる。 以下の記事を参考にした。 書籍「マイクロサービスアーキテクチャ」まとめ(前編) 書籍「マイクロサービスアーキテクチャ」まとめ(後編) 要点 1章 マイクロサービス マイクロサービスとは マイクロサービスとは, 協調して動作する小規模で自律的なサービス。DDD(ドメイン駆動設計), CI・CD(継続的インテグレーション・デリバリ), インフラ仮想化, 自動化, アジャイル開発といったさまざまな分野から生まれたものでありこれらを総合的に実践する必要がある。 以下がマイクロサービスの利点である。 技術異質性…サービスごとに異なる技術を使うことができる 回復性(レジリエンス)…障害のあるコンポーネントを切り離せる スケーリング…必要なサービスのみスケーリング デプロイの容易性…必要なサービスのみデプロイ 組織面の一致…アーキテクチャと組織を一致させる 合成可能性…再利用することができる 交換可能にするための最適化…2週間程度で作り直せる マイクロサービス以外の分解テクニック 共有ライブラリ モジュール 2章 進化的アーキテクト マイクロサービスのアーキテクトは建築士(アーキテクト)というより都市計画家(アーバンプランナー)であり, あらゆる不測の事態に備えて計画するのではなく, 可能性が低いことを必要以上に指定したい衝動を避けて, 変化を許容するように計画する。 以下が進化的アーキテクトの主な責務とされている。 ビジョン…システムが顧客や組織の要件を満たすのを助けるシステムの技術ビジョンを, 明確に伝えるようにする 共感…顧客や同僚に対する自分の判断の影響を理解する 協調…できるだけ多くの仲間や同僚と関わり, ビジョンの定義, 改良, 実行に役立てる 適応性…顧客や組織の要求により技術ビジョンを変更する 自律性…チームに対して標準化と自律性の実現との間の適切なバランスを見出す ガバナンス…実装しているシステムを技術ビジョンに合わせる 3章 サービスのモデル化方法 以下が優れたマイクロサービスを設計するのに必要な性質 疎結合性…連携するサービスに関して必要最低限のことだけしか把握しないようにする 高凝縮性…関連する振る舞いを1箇所にまとめておく 4章 統合 データベースの共有によるサービスの連携は, かんたんではあるが疎結合性と高凝縮性の両方を失うことになり, マイクロサービスを採用する意味がなくなる。 コレオグラフィ サービス間の通信プロトコルとしては, リクエスト/レスポンスとイベントベースがある。前者では, HTTP + RESTをデフォルトの選択肢とする。後者では, あるサービスがイベントを発行して他のサービスが受信するための基板が必要になる。 複数のサービスによって一つの処理が構成される場合の制御方法としては, オーケストレーションとコレオグラフィがある。前者は基点となるサービスが他のサービスをリクエスト/レスポンスで呼び出し, 処理全体のフローを制御する。コレオグラフィでは, 基点となるサービスがイベントベースでイベントを発行して, 他のサービスがそれを受信して個々に処理を行う。 マイクロサービスの原則を満たすためには, コレオグラフィによる連携を模索すべき。 そのためには, 一連のイベントの最初にユニークな相関IDを発番して, イベントに乗せて伝搬させなければならない。 ...