アーキテクチャスタイルの比較

『ソフトウェアアーキテクチャの基礎』 が後半で列挙する代表的なアーキテクチャスタイルの俯瞰。スタイルは 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