開発者とテックリードのためのアーキテクチャパターン集

マイクロサービスプロジェクトに参加すると、すぐに特徴的な詳細に気づきます。クリーンアーキテクチャの理解は開発者ごとに異なります。CQRSを3ページのCRUDに押し込もうとする人、ラッパーの層を何層も重ねた壮大なドメインを構築する 人、結合の問題をEvent Sourcingで解決しようとする人と、状況は様々です。チームが同じ言語で話すためには、統一的知識ベースが必要です。
誰もが数十もの記事や動画のリンクをブックマークしているでしょう。問題は、こうした資料がすぐに埋もれてしまうことです。awesome-software-architectureリポジトリの作者であるMehdi Hadeliは、この問題を解決しました:システム設計資料の構造化されたコレクションを一箇所にまとめ上げたのです。
このリポジトリとは
これは、記事、チュートリアル、書籍、コード例へのリンクを含むオープンな知識ベースです。このプロジェクトはGitHubで11,000スター以上を獲得しています。標準的なAwesomeスタイルのリポジトリとは異なり、一般的なトピックを整理するだけでなく、特定のパターンやアーキテクチャ上の決定事項についてもカバーしています。
開発者たちはまた、Markdownファイルよりも読みやすい別のウェブサイトも公開しています。
コレクションの主なセクション
アーキテクチャスタイルとアプローチ
このリポジトリでは、コードの整理方法について詳しく解説しています:
- モノリスとマイクロサービス。クラシックなモノリスから、コードの将来的な分割に備えたModular Monolithの概念まで。
- レイヤーアーキテクチャ。クリーンアーキテクチャ、Onion、ヘキサゴナルアーキテクチャの違いについて詳しく解説しています。
- Vertical Slice Architecture。技術的なレイヤーではなく、ビジネスの機能を中心にコードをグループ化するアプローチです。
- Actor Model。Akka.NET、Orleans、ProtoActorフレームワークを使用した例を含む、アクターの動作原理。
ドメイン駆動設計(DDD)とCQRS
DDDのセクションが最も詳細に書かれています。著者はEric Evansの概念を構成要素に分解しています。このカタログには、戦略的設計(Bounded Context、Ubiquitous Language)と戦術的パターン(Aggregate、Value Object、Domain Service)に関する資料が含まれています。Anemic Domain Modelのようなアンチパターンも別途取り上げられています。
CQRSのトピック専用のセクションが設けてあり、読み取り/書き込みモデルの分離、データ整合性、Event Sourcingとの関連性について説明しています。
分散システムとクラウド
クラウドサービスを設計する際には、Cloud Design Patternsのセクションが役立ちます:
- レジリエンスパターン:サーキットブレーカー、隔離舱、リトライ。
- メッセージング:Outbox、Inbox、Saga、Change Data Capture。
- ネットワークコンポーネント:API Gateway(Ambassador、Kong、Ocelot)、Service Mesh(Istio、Linkerd)、そしてロードバランシングソリューション。
このコレクションには、インフラツールに関する資料も含まれています:Kubernetes、Terraform、Nomad、Kafka、RabbitMQ、NATS。
可観測性と信頼性
可観測性専用のセクションがあります。Correlation IDによるエンドツーエンドのトレーシング、ELK、EFK、Fluent Bit、Grafana Lokiスタックによるログ収集に関する記事があります。さらに、バックプレッシャーと耐障害性システムの構築についても取り上げられています。
コレクションの特徴と注意点
README自体にTODOと書かれたテーブルがあるのを見かけるでしょう。心配は不要です:これらのトピックに関する記事はまだ準備中のため、近日中に追加される予定ですが、ナビゲーションは整理されており、資料はディレクトリに распределеныなので、検索すれば必要なトピックを簡単に見つけることができます。
リポジトリの弱点は、フレームワーク固有のセクションで.NETスタックへの 明らかな偏りがあることです。Steeltoe、MassTransit、CAPなどのライブラリが頻繁に取り上げられています。しかし、基本的な概念はどこでも同じです。Go、Java、Python、TypeScriptのプロジェクトにも適用できます。
カタログの実践的な使い方
- システム設計面接の準備。このコレクションは、アーキテクチャセクションで出されるほとんどの質問に対応しています。
- システム設計の参考資料。アクターとクラシックサービスの違いを思い出すのに役立つ他、適切なメッセージングパターンの選択にも使えます。
- オンボーディングとチームトレーニング。リポジトリのリンクは、開発者をプロジェクトの architectureに没頭させるための読書リストとして機能します。
awesome-software-architectureリポジトリは、関数の記述からシステム設計への移行期にある開発者にとって価値があります。このプロジェクトをブックマークして、パターンに関する適切な記事を常に手の届くところに置いておきましょう。
関連プロジェクト