アーキテクチャスタイルの比較
『ソフトウェアアーキテクチャの基礎』 が後半で列挙する代表的なアーキテクチャスタイルの俯瞰。スタイルは FE/BE のソースの構成方法とデータストアの相互作用を規定するもので、「構造」であって「アーキテクチャ」そのものではない。
モノリシック系
- レイヤードアーキテクチャ: プレゼン/ビジネス/永続化/DB の水平層。技術駆動パッケージング。シンプルだが弾力性・スケーラビリティが低く、シンクホールアンチパターンに陥る。詳細は clean-layered-architecture。
- パイプラインアーキテクチャ: producer→transformer→tester→consumer のパイプとフィルター。シェルのパイプや MapReduce が例。
- マイクロカーネルアーキテクチャ: コアシステム+プラグイン。IDE・ブラウザ・税務申告ソフトなど。レジストリ(ZooKeeper, Consul)とコントラクトで拡張。
分散系
- サービスベースアーキテクチャ: DB を共有する粗粒度サービス群。最も柔軟なスタイルの一つ。
- イベント駆動アーキテクチャ: ブローカー型(高スケール)とメディエータ型(ワークフロー制御)。非同期(request-reply / fire-and-forget)、相関ID、データロス対策を扱う。cqrs-event-sourcing と接続。
- スペースベースアーキテクチャ: タプルスペース由来。処理ユニット+仮想ミドルウェア+データポンプで中央DBのボトルネックを回避。チケット販売など急増負荷に強い。
- SOA(オーケストレーション駆動): 再利用最優先だが結合が増える負のトレードオフ。
- マイクロサービス: DDD の境界づけられたコンテキストでモデル化。再利用より複製、サーガパターンで分散トランザクションを補償。microservices-architecture。
選定
分散の8つの誤信(ネットワークは信頼できる/レイテンシ0…)を踏まえ、ドメインとトポロジーの同型性を見て選ぶ。すべては アーキテクチャ特性 のトレードオフに帰着する。
関連: _moc-book-notes