クラウドネイティブの通信パターン

ヒント

このコンテンツは eBook の「Azure 向けクラウド ネイティブ .NET アプリケーションの設計」からの抜粋です。.NET Docs で閲覧できるほか、PDF として無料ダウンロードすると、オンラインで閲覧できます。

Cloud Native .NET apps for Azure eBook cover thumbnail.

クラウドネイティブ システムを構築する場合、通信は設計上の重要な決定事項になります。 フロントエンド クライアント アプリケーションとバックエンド マイクロサービスの通信はどのように行われるのか。 バックエンド マイクロサービスの相互通信はどのように行われるのか。 クラウドネイティブ アプリケーションに通信を実装するときに考慮する必要がある原則、パターン、およびベストプラクティスは何でしょうか。

通信に関する考慮事項

モノリシック アプリケーションの場合、通信はシンプルです。 コード モジュールは、サーバー上の同じ実行可能領域 (プロセス) で一緒に実行されます。 この方法では、すべてが共有メモリ内で実行されるため、パフォーマンスが向上する可能性があります。ただし、コードが密結合されて、保守、進化、スケーリングが困難になります。

クラウドネイティブ システムでは、多数の小規模な独立したマイクロサービスを備えたマイクロサービスベースのアーキテクチャが実装されます。 各マイクロサービスは個別のプロセスで実行され、通常は "クラスター" にデプロイされたコンテナー内で実行されます。

クラスターでは、仮想マシンのプールがグループ化されて、高可用性環境が形成されます。 これらは、コンテナー化されたマイクロサービスのデプロイと管理を担当するオーケストレーション ツールを使用して管理されます。 図 4-1 は、フル マネージドの Azure Kubernetes サービスを使用して Azure クラウドにデプロイされた Kubernetes クラスターを示しています。

A Kubernetes cluster in Azure

図 4-1 Azure の Kubernetes クラスター

クラスター全体で、マイクロサービスは API およびメッセージング テクノロジによって相互に通信します。

多くの利点がありますが、マイクロサービスは万能ではありません。 コンポーネント間のローカルのインプロセス メソッド呼び出しがネットワーク呼び出しに置き換えられています。 各マイクロサービスは、ネットワーク プロトコルを介して通信する必要があります。これにより、システムの複雑さが増します。

  • ネットワークの輻輳、待機時間、一時的な障害が、恒常的な問題となります。

  • 回復性 (失敗した要求の再試行) が不可欠です。

  • 一貫性のある状態を維持するために、一部の呼び出しがべき等である必要があります。

  • 各マイクロサービスで、呼び出しが認証および承認される必要があります。

  • 各メッセージをシリアル化してから逆シリアル化する必要があります。これには高いコストがかかるおそれがあります。

  • メッセージの暗号化と暗号化の解除が重要になります。

Microsoft から無料で入手できるブック「.NET マイクロサービス: コンテナー化された .NET アプリケーションのアーキテクチャ」では、マイクロサービス アプリケーションの通信パターンの詳細について説明しています。 この章では、これらのパターンの概要と、Azure クラウドで利用可能な実装オプションについて説明します。

この章では、まずフロントエンド アプリケーションとバックエンド マイクロサービスの間の通信を取り上げます。 次に、バックエンド マイクロサービスによる相互通信を確認します。 ここでは、up and gRPC 通信テクノロジについて説明します。 最後に、サービス メッシュ テクノロジを使用した革新的な新しい通信パターンについて見ていきます。 また、Azure クラウドで、クラウドネイティブ通信をサポートするさまざまな種類の "支援サービス" がどのように提供されているかについても説明します。