1. アーキテクチャパターン入門 MOC
- アーキテクチャパターンとは
- アーキテクチャパターンとデザインパターンの違い
- アーキテクチャパターンの利点
- アーキテクチャパターンの選択
- 要求される品質特性 (非機能要件) の特定
[[パフォーマンス (Performance)]][[スケーラビリティ (Scalability)]][[可用性 (Availability) と耐障害性 (Fault Tolerance)]][[保守性 (Maintainability) と拡張性 (Extensibility)]][[セキュリティ (Security)]][[テスト容易性 (Testability)]][[デプロイ容易性 (Deployability)]][[コスト (Cost)]]
- ドメインの特性とビジネス要件の考慮
- 技術的制約とチームのスキルセット
- 複数のパターンを組み合わせる際の考慮点
- 要求される品質特性 (非機能要件) の特定
- アーキテクチャパターンの分類 (概要)
- アーキテクチャスタイルの概念 (パターンよりも広範な指針)
2. 主要なアーキテクチャパターン MOC
2.1. レイヤードアーキテクチャ (Layered Architecture) MOC
- レイヤードアーキテクチャ: 定義と目的 (関心事の分離)
- レイヤードアーキテクチャ: 基本構造と代表的な層
[[プレゼンテーション層 (Presentation Layer / UI Layer)]][[アプリケーション層 (Application Layer / Service Layer / Business Logic Layer)]][[ドメイン層 (Domain Layer)]](DDDにおける)[[データアクセス層 (Data Access Layer - DAL) / 永続化層 (Persistence Layer)]][[インフラストラクチャ層 (Infrastructure Layer)]]
- レイヤードアーキテクチャ: 層間の依存関係ルール
- 厳格なレイヤリング (Strict Layering) (隣接する下位層のみアクセス可)
- Flexible Layering)
- レイヤードアーキテクチャ: 利点 (モジュール性、保守性、再利用性、テスト容易性、並行開発)
- レイヤードアーキテクチャ: 欠点 (パフォーマンスオーバーヘッド、シンクホールアンチパターン、過度な抽象化)
- レイヤードアーキテクチャ: 適用例 (伝統的なWebアプリケーション、エンタープライズアプリケーション)
- レイヤードアーキテクチャのバリエーション
- 3層アーキテクチャ (3-Tier Architecture) (プレゼンテーション、アプリケーション、データ)
- N層アーキテクチャ (N-Tier Architecture)
- レイヤードアーキテクチャ: 実装上の考慮事項
- レイヤードアーキテクチャと他のアーキテクチャスタイル (クリーンアーキテクチャなど) との関係
2.2. クライアントサーバアーキテクチャ (Client-Server Architecture) MOC
- クライアントサーバアーキテクチャ: 定義と目的 (リソース共有と集中管理)
- クライアントサーバアーキテクチャ: 構成要素
[[クライアント (Client)]][[サーバ (Server)]][[ネットワーク (Network)]]
- レスポンスモデル)
- クライアントサーバアーキテクチャ: 利点 (集中管理、スケーラビリティ、セキュリティ)
- クライアントサーバアーキテクチャ: 欠点 (サーバの単一障害点、ネットワーク依存、サーバ負荷集中)
- クライアントサーバアーキテクチャのバリエーション
[[2層クライアントサーバ (Two-Tier Client-Server)]](ファットクライアント、シンクライアント)[[3層クライアントサーバ (Three-Tier Client-Server)]](レイヤードとの関連)[[N層クライアントサーバ (N-Tier Client-Server)]]
- クライアントサーバアーキテクチャ: 適用例 (Webシステム、データベースシステム、ファイルサーバ)
2.3. Model-View-Controller (MVC) アーキテクチャ MOC
- MVC: 定義と目的 (UIとビジネスロジックの分離)
- MVC: 構成要素
- モデル (Model) (データとビジネスロジック)
- ビュー (View) (ユーザーインターフェース、データの表示)
- コントローラ (Controller) (ユーザー入力の処理、ModelとViewの連携)
- MVC: 構成要素間の相互作用
- MVC: 利点 (関心の分離、再利用性、テスト容易性、並行開発)
- MVC: 欠点 (複雑性の増加、Controllerの肥大化)
- MVCの派生パターン
- Model-View-Presenter (MVP) アーキテクチャ MOC
[[MVP: Presenterの役割とViewとの関係 (Passive View, Supervising Controller)]][[MVPとMVCの違い]]
- Model-View-ViewModel (MVVM) アーキテクチャ MOC
[[MVVM: ViewModelの役割とViewとのデータバインディング]][[MVVMとMVC/MVPの違い]][[コマンドパターンの利用]]
[[(オプション) MVA (Model-View-Adapter), VIPER (iOS), Flux/Redux (フロントエンド)]]
- Model-View-Presenter (MVP) アーキテクチャ MOC
- MVCファミリー: 適用例 (Webアプリケーションフレームワーク、GUIアプリケーション)
2.4. マイクロサービスアーキテクチャ (Microservices Architecture) MOC
- マイクロサービス: 定義と目的 (小さく独立したサービスの集合としてアプリケーションを構築)
- マイクロサービス: 主要な特徴と原則
[[単一責任の原則 (SRP) のサービスレベル適用]][[独立したデプロイメント]][[技術的多様性 (Polyglot Programming/Persistence)]][[分散化されたガバナンスとデータ管理]][[障害分離と耐障害性]][[スケーラビリティ (サービス単位)]][[ドメイン駆動設計 (DDD) との関連 (境界づけられたコンテキスト)]]
- マイクロサービス: モノリシックアーキテクチャとの比較
[[モノリシックアーキテクチャの利点と欠点]]
- マイクロサービス: 利点 (開発速度向上、スケーラビリティ、技術選択の柔軟性、チームの自律性)
- マイクロサービス: 欠点と課題 (分散システムの複雑性、運用コスト、テストの困難さ、サービス間通信、最終的な整合性)
- マイクロサービスアーキテクチャの構成要素と関連技術・パターン
- APIゲートウェイ (API Gateway) パターン MOC
- サービスディスカバリ (Service Discovery) パターン MOC (クライアントサイド、サーバサイド)
- サービス間通信 (Inter-Service Communication) MOC
[[同期通信 (RESTful API, gRPC)]][[非同期通信 (メッセージキュー: RabbitMQ, Kafka)]]
- 耐障害性パターン MOC
[[回路ブレーカー (Circuit Breaker) パターン]][[リトライ (Retry) パターン]][[タイムアウト (Timeout) パターン]][[フォールバック (Fallback) パターン]][[バルクヘッド (Bulkhead) パターン]]
- データ管理戦略 MOC
[[各サービス専用データベース (Database per Service)]][[イベントソーシング (Event Sourcing) とマイクロサービス]][[CQRS (Command Query Responsibility Segregation) とマイクロサービス]]- サーガ (Saga) パターン MOC (分散トランザクションの管理)
- デプロイメント戦略 MOC (コンテナ化: Docker, オーケストレーション: Kubernetes)
- 監視とロギング (Monitoring and Logging) MOC (分散トレーシング、集中ロギング)
- セキュリティ (Security) MOC (認証・認可、APIセキュリティ)
- マイクロサービス: 適用例 (大規模Webプラットフォーム、Netflix, Amazonなど)
- マイクロサービス: いつ採用すべきか、いつ避けるべきか
- マイクロサービス: アンチパターン (
[[分散モノリス]],[[サービス間の過度なチャット通信]],[[共有ライブラリの乱用]])
2.5. イベント駆動アーキテクチャ (Event-Driven Architecture - EDA) MOC
- EDA: 定義と目的 (イベントの生成、検出、消費を中心とした設計)
- EDA: 主要な構成要素
[[イベント (Event)]](状態変化の通知)[[イベントプロデューサー (Event Producer)]][[イベントコンシューマー (Event Consumer / Subscriber)]][[イベントチャネル (Event Channel / Event Bus / Message Broker)]]
- EDAのスタイル
- Subscribe Model)
- イベントストリーミングモデル (Event Streaming Model) (例: Apache Kafka)
- イベントソーシング (Event Sourcing) (状態をイベントのシーケンスとして保存 - アーキテクチャ的側面)
- EDA: 利点 (疎結合、スケーラビリティ、応答性、耐障害性、リアルタイム性)
- EDA: 欠点 (複雑性、デバッグの困難さ、イベントの順序保証、結果整合性)
- EDA: 適用例 (リアルタイム分析、IoTシステム、マイクロサービス間の連携、非同期処理)
- EDAと他のアーキテクチャ (マイクロサービス、サーバレス) との組み合わせ
- EDA: 実装技術 (メッセージキュー, Apache Kafka,クラウドサービス)
2.6. パイプアンドフィルタアーキテクチャ (Pipe-and-Filter Architecture) MOC
- パイプアンドフィルタ: 定義と目的 (データストリームを処理する一連の独立したフィルタをパイプで連結)
- パイプアンドフィルタ: 構成要素
[[フィルタ (Filter)]](データ処理コンポーネント)[[パイプ (Pipe)]](フィルタ間のデータチャネル)[[データソース (Data Source)]][[データシンク (Data Sink)]]
- パイプアンドフィルタ: 動作原理
- パイプアンドフィルタ: 利点 (単純性、再利用性、並列処理の可能性、柔軟性)
- パイプアンドフィルタ: 欠点 (共通データフォーマットの必要性、パフォーマンスオーバーヘッド、状態管理の困難さ)
- パイプアンドフィルタ: 適用例 (UNIXシェルパイプ、コンパイラのフェーズ、ETL処理、画像処理)
2.7. Microkernel Architecture) MOC
- プラグインアーキテクチャ: 定義と目的 (コアシステムに機能拡張ポイントを提供し、プラグインで機能追加)
- プラグインアーキテクチャ: 構成要素
[[マイクロカーネル (Microkernel) / コアシステム (Core System)]][[プラグイン (Plugin / Add-on / Extension)]][[プラグインレジストリ / プラグインマネージャ]][[拡張ポイント (Extension Points) / プラグインAPI]]
- プラグインアーキテクチャ: 利点 (拡張性、柔軟性、機能の分離、サードパーティ開発)
- プラグインアーキテクチャ: 欠点 (プラグイン間の依存関係、コアシステムの安定性への影響、複雑なAPI設計)
- VS Code, Webブラウザ拡張機能, OSカーネル(一部))
- OSGi (Open Service Gateway initiative) との関係
2.8. スペースベースアーキテクチャ (Space-Based Architecture) MOC (タプルスペース、分散キャッシュ)
- タプルスペースを介した非同期なコンポーネント間通信)
- スペースベースアーキテクチャ: 構成要素
[[処理ユニット (Processing Unit)]][[仮想化ミドルウェア (Virtualized Middleware) / タプルスペース (Tuple Space)]]
- スペースベースアーキテクチャ: 動作原理 (データの書き込み、読み出し、取得)
- スペースベースアーキテクチャ: 利点 (高いスケーラビリティ、耐障害性、疎結合)
- スペースベースアーキテクチャ: 欠点 (結果整合性、開発の複雑さ)
- スペースベースアーキテクチャ: 適用例 (高トラフィックWebアプリケーション、リアルタイム取引システム)
- クラウドネイティブアーキテクチャとの関連
2.9. ブローカーアーキテクチャ (Broker Architecture) MOC
- ブローカーアーキテクチャ: 定義と目的 (分散システムにおけるコンポーネント間の通信をブローカーが仲介)
- ブローカーアーキテクチャ: 構成要素
[[クライアント (Client)]][[サーバ (Server / Service Provider)]][[ブローカー (Broker)]]
- ブローカーアーキテクチャ: 動作原理 (リクエスト転送、サービス発見)
- ブローカーアーキテクチャ: 利点 (位置透過性、疎結合、拡張性、言語・プラットフォーム非依存性)
- ブローカーアーキテクチャ: 欠点 (ブローカーの単一障害点、パフォーマンスオーバーヘッド)
- ブローカーアーキテクチャ: 適用例 (メッセージブローカー (RabbitMQ, ActiveMQ), CORBA, DCOM)
2.10. サービス指向アーキテクチャ (SOA - Service-Oriented Architecture) MOC
- SOA: 定義と目的 (再利用可能なビジネスサービスを組み合わせてアプリケーションを構築)
- SOA: 基本原則 (標準化されたインターフェース、疎結合、サービスの自律性、再利用性など)
- SOA: 構成要素 (サービスプロバイダ, サービスコンシューマ, サービスレジストリ, ESB)
- エンタープライズサービスバス (ESB - Enterprise Service Bus)
- SOAとWebサービス (SOAP, WSDL, UDDI)
- SOA: 利点 (ビジネス価値の向上、再利用性、俊敏性)
- SOA: 欠点 (複雑性、ガバナンスの難しさ、ESBのボトルネック)
- SOAとマイクロサービスアーキテクチャの比較 (粒度、ガバナンス、ESBの有無など)
- SOA: 適用例 (大規模エンタープライズシステム統合)
2.11. (オプション) ピアツーピア (P2P) アーキテクチャ MOC
- P2P: 定義と目的 (中央サーバなしで各ピアが対等に機能を提供・利用)
- P2Pネットワークのトポロジ (非構造化、構造化)
- P2P: 利点 (耐障害性、スケーラビリティ、検閲耐性)
- P2P: 欠点 (リソース発見の困難さ、セキュリティ、品質保証の難しさ)
- P2P: 適用例 (ファイル共有システム, ブロックチェーン, 一部メッセージングアプリ)
2.12. (オプション) Blackboard アーキテクチャ MOC
- Blackboard: 定義と目的 (複雑な問題解決のため、複数の専門知識ソースが共有知識ベース(黒板)を介して協調)
- Blackboard: 構成要素 (知識ソース, 黒板, 制御コンポーネント)
- Blackboard: 適用例 (音声認識, AIプランニング)
3. アーキテクチャパターンの比較と選択戦略 MOC
- 品質特性マトリクスによるパターンの比較
- ドメイン駆動設計 (DDD) とアーキテクチャ選択
- CAP定理と分散アーキテクチャ (Consistency, Availability, Partition tolerance)
- アーキテクチャ決定レコード (ADR - Architecture Decision Records)
- トレードオフ分析 (Trade-off Analysis)
- プロトタイピングとPoC (Proof of Concept) による検証
- 段階的なアーキテクチャ進化 (Evolutionary Architecture)
4. アーキテクチャパターンの組み合わせとハイブリッドアプローチ MOC
- 複数のアーキテクチャパターンをシステム内で組み合わせる例
[[マイクロサービスとイベント駆動アーキテクチャの組み合わせ]][[レイヤードアーキテクチャ内の特定層でMVCを適用]]
- ハイブリッドアーキテクチャ設計の注意点
5. アーキテクチャのドキュメンテーションと伝達 MOC
- コンポーネント図)
- ビューポイントとビュー (Viewpoints and Views) (Kruchten’s 4+1 View Modelなど)
- アーキテクチャドキュメントの維持管理