現代のソフトウェア開発では、次のような複数のアーキテクチャパターンがあります!
- レイヤードアーキテクチャ
- パイプラインアーキテクチャ
- サービスベースアーキテクチャ
- イベント駆動アーキテクチャ
- スペースベースアーキテクチャ
- マイクロサービスアーキテクチャ
本記事では、これらの概要と特徴、メリット・デメリットを全部まとめて解説!
1. レイヤードアーキテクチャ
【概要】
機能を「層(Layer)」に分け、上から下へ順第に出入力する構成。
【代表例】
- Webアプリ(表示層、ロジック層、データアクセス層)
【メリット】
- 分識がわかりやすい
- 各層で他層に影響させず変更可
【デメリット】
- 層を越える速度が遅い(インピーダンス)
- スパゲッティ化しやすい
2. パイプラインアーキテクチャ
【概要】
変換・加工をならべて続けていく「パイプ」の系列。次々にデータを滑らせて出力する。
【代表例】
- ビデオプロセシング
- ストリーミングAPI
【メリット】
- 課題を次々に分割できる
- リトライム性が高い
【デメリット】
- この流れから外れる変更に弱い
- データ互換性テストが必要
3. サービスベースアーキテクチャ
【概要】
機能単位(サービス)ごとに分離してシステムを組み立てる構成。
【代表例】
- SOA(Service Oriented Architecture)
【メリット】
- 内部構造の自由度が高い
- 内部をすり替えやすい
【デメリット】
- サービス管理は複雑
- 接続経路の偵索が困難
4. イベント駆動アーキテクチャ
【概要】
「イベント(Event)」に対してシステムが反応し、非同期に動く。
【代表例】
- Kafka、SQS + Lambda連携
【メリット】
- ルーズ性が高い
- 非同期処理でスケーラブに強い
【デメリット】
- デバッグが難しい
- 独特の設計思考が必要
5. スペースベースアーキテクチャ
【概要】
複数のインスタンスが一緒に悪い方向に働かないよう、キャッシュを中心にスケーラブにする構成。
【代表例】
- In-Memory Data Grid(IMDG)
- Hazelcast
【メリット】
- スケール性高
- 隔離障害に強い
【デメリット】
- キャッシュ管理が複雑
- 実装コストが高い
6. マイクロサービスアーキテクチャ
【概要】
最小単位のサービスを自立させ、各自独で開発、配置、スケールできる。
【代表例】
- Amazon、Netflix
【メリット】
- 自立性高い
- スケール性が最高レベル
【デメリット】
- 管理コストが最大
- ネットワークオーバーヘッドが必要
【まとめ】
同じ「ソフトウェアの構築」でも、
- プロジェクトのスケール
- 開発チームの性質
- ユースケースの要件
によって適切なパターンは違います。