MSA(Microservices Architecture) マイクロサービスアーキテクチャ
MSAとは?
- Microservices Architecture。
- すべてのシステム構成要素が1つのプロジェクトに統合されているMonolithic Architecture(モノリシックアーキテクチャ)の限界を克服するために登場した。
- 小さく、独立してデプロイ可能な、それぞれ特定の機能を担うサービスで構成されたフレームワークである。
- MSAは1つのシステムを完全に独立してデプロイ可能な個別サービスに分割する。
- 各サービスはRESTful APIを通じてデータをやり取りし、1つの大きなサービスを構成する。
- 異なる技術スタック(開発言語、データベースなど)を利用できる単一の事業領域に焦点を当てる。
MSAの特徴
- APIを通じてのみ相互作用できる。
- サービスのend-point(接点)をAPIの形で外部に公開する。
- 実際の詳細はすべて抽象化する。
- 内部の実装ロジック、アーキテクチャ、プログラミング言語、データベース、品質維持体系のような技術的事項は、サービスAPIによって徹底的に隠蔽される。
MSAのメリット
- 各サービスはモジュール化されており、これらのモジュール同士はRPCまたはMessage-driven APIなどを利用して通信する。
- 個々のサービス開発を速くし、保守もしやすくする。
- サービスごとに適切な水準の技術スタックを変えて採用できる。
- サービスごとに独立してデプロイできる。
- 継続的デプロイ(CD)もモノリシックに比べて軽く行える。
- 各サービスの負荷に応じて個別にScale-outできる。
- 一部のサービスで障害が発生しても、サービス全体の障害にはならない。
- 各サービスは異なる言語やフレームワークで構成できる。
- サービスの拡張が容易である。
MSAのデメリット
- モノリシックに比べて相対的にかなり複雑である。
- サービス間でRESTful APIを使って通信するため、そのコストが発生する。
- サービスが分離されているため、テストやトランザクション処理などが難しい。
- 通信障害やサーバー負荷がある場合、どのようにtransactionを維持するかを決定し、実装しなければならない。
- サービス間の呼び出しが連続するため、デバッグや統合テストが難しい。
- 実際の運用環境へデプロイすることが容易ではない。
MSAサーバー構成
サービスディスカバリサーバー
Webサービスクライアント
クライアントサイドロードバランサー
サーキットブレーカー(Circuit Breaker)
- Spring: Netflix Hystrix
- クライアントからリモートサーバーへ送信したリクエストの失敗率が特定のしきい値(threshold)を超えると、サーバーに問題があると判断し、それ以上無意味なリクエストを送らず、すばやくエラーを発生させる方法(fail fast)である。
APIゲートウェイ(Gateway)
- Spring: Netflix Zuul, Gateway
- リバースプロキシサーバー。
参考