システムアーキテクチャパターンは AP科目A + 科目B問4 で頻出。レイヤード・MSA・クリーンアーキテクチャ等を整理します。
代表的なアーキテクチャパターンを整理すると、① 3層レイヤード (プレゼンテーション・ビジネス・データ)、② MVC (Model-View-Controller)、③ ヘキサゴナル (Ports & Adapters)、④ クリーンアーキテクチャ、⑤ MSA (マイクロサービス)、⑥ サーバレス (FaaS)、⑦ イベント駆動、といったところですね。
MSA って何が嬉しいの?
Microservice Architecture のことね。
サービスを独立してデプロイできる小さなユニットに分解する設計なのよ。
利点は ① 個別にスケールできる、② 個別にデプロイできる、③ 技術スタックを自由に選べる、④ 障害が局所化されること。
ただし、運用の複雑さ・ネットワーク遅延・分散トランザクションの難しさがトレードオフになるわ。
12-Factor App って?
Heroku が提唱した『SaaS アプリ作成の12原則』ですね。
Code base ・Dependencies ・Config ・Backing Services ・Build/Release/Run ・Processes ・Port Binding ・Concurrency ・Disposability ・Dev/Prod Parity ・Logs ・Admin Processes の12項目で、クラウドネイティブの基盤になっています。
AP では『MSA の利点と課題』『MVC の責務分離』『12-Factor の各項目』が頻出ね。
あと最近は『モノリス vs マイクロサービス』のトレードオフも出題されているのよ。
クリーンアーキテクチャはどんな感じなの?
Robert C. Martin (Uncle Bob) が提唱した設計ですね。
『同心円』で表現されて、内側 (エンティティ・ユースケース) がビジネスロジック、外側 (UI・DB・フレームワーク) が実装詳細にあたります。
依存性は内側方向のみに向ける (DIP の徹底) ことで、外側を交換可能にするのがポイントです。
確認クイズ
マイクロサービスアーキテクチャ (MSA) の利点として、最も適切でないものはどれか。
- サービスごとに独立してデプロイ・スケールできる
- サービスごとに異なる技術スタックを採用できる
- 1つのサービスの障害が他に波及しにくい
- 分散トランザクションが容易に実装できる
こたえを見る
正解: 4. 分散トランザクションが容易に実装できる
MSA は分散トランザクションがむしろ難しい (各サービスがDBを持つため、ACID を全体で保証できない)。Saga パターンや結果整合性で対応する必要があり、これが MSA の代表的なトレードオフ。1・2・3 はすべて MSA の利点。