Gridwich のクリーン モノリス アーキテクチャ

Azure Event Grid
Azure Functions

このプロジェクトのコードは、クリーン アーキテクチャ モノリスとして構成されています。一般的な概念コンポーネントは次のとおりです。

  • API アダプター
  • 分離アプリケーション ビジネス ロジック
  • コア ドメイン オブジェクト
  • インフラストラクチャ ゲートウェイ
  • 制御の反転 (IoC)

Diagram showing typical conceptual components of a clean monolith architecture.

ソリューションはステートレスであるため、永続レイヤーへのゲートウェイは含まれません。 このソリューションにはユーザー インターフェイスがないため、コントローラーもプレゼンターもありません。

ソフトウェア コンポーネントの構成では、GridwichConfigureServices クラスを使用して、Azure Functions アプリの IoC コンテナーで使用できる具象クラスを定義します。

Architecture

Diagram showing components of the Gridwich monolith architecture.

Gridwich ソリューションには、次を含む Core.EventGrid ライブラリがあります。

  • ドメイン要求および応答データ転送オブジェクト (DTO)。
  • すべてのアプリケーション ビジネス ロジックまたはサービス オブジェクト用のインターフェイス。
  • 共通ドメイン駆動型ロジックまたはアクティビティの実現に役立つ基底クラス。
  • アプリケーション全体で使用するためのログ、監視、および例外の定義。

Azure Event Grid を要求および応答ブローカーとしてカプセル化するために、ライブラリには次のものがあります。

  • IoC を使用してイベントを識別し、リスナーにディスパッチするイベント ディスパッチャー。
  • 正しい Event Grid トピックに応答を配置するイベント パブリッシャー。

Event Grid 要求アダプターは、Azure 関数 HTTP エンドポイントの形式の HTTP エンドポイントです。 Web 要求を Event Grid 配列に変換するアダプターも、同じ EventGridFunction に含まれています。

Event Grid 応答ゲートウェイは、次の要素で構成されています。

  • EventGridHandlerBase。応答 DTO を EventGridEvent オブジェクトに変換します。
  • EventGridDispatcher。トピック キーを使用して、正しい応答 Event Grid トピック エンドポイント URI に Event Grid イベントを配置します。

このソリューションでは、saga 参加要素が次のライブラリに分離され、それぞれがドメイン固有のアプリケーション ビジネス ロジックに関連付けられています。 ライブラリには、必要なインフラストラクチャ ゲートウェイとその SDK が含まれており、ビジネス ロジックに必要なアクションを実行します。

Gridwich では、コードの再利用と一元化を目的として、複数の参加要素が使用するビジネス ロジックまたはインフラストラクチャ ゲートウェイが次の共有ライブラリに統合されています。

マイクロサービスの代替手段

Gridwich の問題空間またはアーキテクチャでは、ソリューションがモノリシック アプリまたは複数のマイクロサービスに明示的にプッシュされることはありません。

アプリはマイクロサービスに簡単にリファクタリングすることができ、各関数アプリが 1 つの saga 参加要素をホストします。 各関数アプリでは、コアとコア Event Grid ライブラリがリンクされます。 各アプリにリンケージがあるか、インフラストラクチャ ゲートウェイ用の共通ライブラリが使用されます。

Diagram showing an alternative Gridwich microservices architecture.

このようなマイクロサービス アプローチの利点は、要求の種類ごとに異なる方法でスケーリングできるという点です。 1 つの種類の要求が 1 秒間に数千ある一方で、別の種類の要求が 1 日に数百しかない場合、ソリューション全体では、簡単にインスタンス化可能ですぐに実行できる小さな関数を大量の要求に対して使用できるというメリットがあります。

マイクロサービスの欠点は、すべての共有モデルでマイクロサービスの同期されたロールアウトが必要であるか、またはデータ スキーマが変更された場合に、要求プールのドレインと切り替えが必要であるという点です。 この要件により、将来の開発、継続的なデプロイ、および運用が複雑になります。 ビジネス上の問題にはマイクロサービスの必要性が示されていなかったため、Gridwich アーキテクチャではクリーン モノリス アプローチが使用されています。

次のステップ