ヒント
このコンテンツは、Azure 用のクラウド ネイティブ .NET アプリケーションの設計に関する電子ブックからの抜粋であり、.NET Docs またはオフラインで読み取ることができる無料のダウンロード可能な PDF として入手できます。
Microsoft は、主要なコミュニティ専門家と協力して、フル機能のクラウドネイティブ マイクロサービス参照アプリケーション eShopOnContainers を作成しました。 このアプリケーションは、.NET と Docker、および必要に応じて Azure、Kubernetes、Visual Studio を使用して、オンライン ネットショップを構築するように構築されています。
図 2-1 eShopOnContainers サンプル アプリのスクリーンショット。
この章を開始する前に、 eShopOnContainers 参照アプリケーションをダウンロードすることをお勧めします。 そうすることで、表示された情報をより簡単に理解し、追うことができるようになります。
機能と要件
まず、アプリケーションの機能と要件を確認しましょう。 eShopOnContainers アプリケーションは、T シャツやコーヒー マグなどのさまざまな物理的な製品を販売するオンライン ストアを表します。 以前にオンラインで何かを購入したことがある場合、ストアを使用する経験は比較的よく知られているはずです。 ストアが実装する基本的な機能の一部を次に示します。
- カタログ アイテムを一覧表示する
- 種類別にアイテムをフィルター処理する
- ブランド別にアイテムをフィルター処理する
- 買い物かごにアイテムを追加する
- バスケットからアイテムを編集または削除する
- チェックアウト
- アカウントを登録する
- サインイン
- サインアウト
- 注文を確認する
アプリケーションには、次の機能以外の要件もあります。
- 高可用性が必要であり、トラフィックの増加に合わせて自動的にスケーリングする必要があります (トラフィックが収まったらスケール ダウンします)。
- 発生した問題のトラブルシューティングに役立つ、正常性と診断ログの使いやすい監視を提供する必要があります。
- 継続的インテグレーションとデプロイ (CI/CD) のサポートなど、アジャイル開発プロセスをサポートする必要があります。
- 2 つの Web フロントエンド (従来のアプリケーションとシングル ページ アプリケーション) に加えて、アプリケーションでは、さまざまな種類のオペレーティング システムを実行するモバイル クライアント アプリもサポートする必要があります。
- クロスプラットフォーム ホスティングとクロスプラットフォーム開発をサポートする必要があります。
図 2-2. eShopOnContainers 参照アプリケーション開発のアーキテクチャ。
eShopOnContainers アプリケーションは、ASP.NET Core MVC サーバー アプリケーションまたは適切な API ゲートウェイをターゲットとする HTTPS 経由でアプリケーションにアクセスする Web クライアントまたはモバイル クライアントからアクセスできます。 API ゲートウェイには、バックエンド サービスを個々のフロントエンド クライアントから切り離したり、セキュリティを強化したりなど、いくつかの利点があります。 このアプリケーションでは、バックエンド for フロントエンド (BFF) と呼ばれる関連パターンも使用します。このパターンでは、フロントエンド クライアントごとに個別の API ゲートウェイを作成することをお勧めします。 この参照アーキテクチャでは、要求が Web クライアントとモバイル クライアントのどちらから送信されているかに基づいて API ゲートウェイを分割する方法を示します。
アプリケーションの機能は、さまざまなマイクロサービスに分割されています。 認証と ID、製品カタログからのアイテムの一覧表示、ユーザーの買い物かごの管理、注文を行うサービスがあります。 これらの個別の各サービスには、独自の永続的ストレージがあります。 すべてのサービスが対話する 1 つのプライマリ データ ストアはありません。 代わりに、サービス間の調整と通信は、必要に応じて、メッセージ バスを使用して行われます。
マイクロサービスはそれぞれ、個々の要件に基づいて設計が異なります。 この側面は、テクノロジ スタックが異なる可能性があることを意味しますが、これらはすべて .NET を使用して構築され、クラウド用に設計されています。 シンプルなサービスでは、基になるデータ ストアへの基本的な Create-Read-Update-Delete (CRUD) アクセスが提供されますが、より高度なサービスでは、Domain-Driven 設計のアプローチとパターンを使用してビジネスの複雑さを管理します。
図 2-3。 さまざまな種類のマイクロサービス。
コードの概要
マイクロサービスを使用するため、eShopOnContainers アプリには、GitHub リポジトリに非常に多くの個別のプロジェクトとソリューションが含まれています。 さまざまなサービスは、個別のソリューションと実行可能ファイルに加えて、ローカル開発時と運用環境での実行時の両方で、独自のコンテナー内で実行するように設計されています。 図 2-4 は、さまざまなプロジェクトが編成された完全な Visual Studio ソリューションを示しています。
図 2-4 Visual Studio ソリューションのプロジェクト。
コードは、さまざまなマイクロサービスをサポートするように編成されており、各マイクロサービス内で、コードはドメイン ロジック、インフラストラクチャの懸念事項、およびユーザー インターフェイスまたはサービス エンドポイントに分割されます。 多くの場合、各サービスの依存関係は、運用環境の Azure サービスと、ローカル開発の代替オプションによって満たすことができます。 アプリケーションの要件が Azure サービスにどのように対応しているかを調べてみましょう。
マイクロサービスについて
この書籍では、Azure テクノロジを使用して構築されたクラウドネイティブ アプリケーションに焦点を当てています。 マイクロサービスのベスト プラクティスとマイクロサービス ベースのアプリケーションを設計する方法の詳細については、 コンパニオン ブック「.NET マイクロサービス: コンテナー化された .NET アプリケーションのアーキテクチャ」を参照してください。
.NET