サービス メッシュ通信インフラストラクチャ
ヒント
このコンテンツは eBook の「Azure 向けクラウド ネイティブ .NET アプリケーションの設計」からの抜粋です。.NET Docs で閲覧できるほか、PDF として無料ダウンロードすると、オンラインで閲覧できます。
この章では、マイクロサービス通信の課題について詳しく説明してきました。 その中で、開発チームはバックエンド サービス間での相互通信のあり方に注意を払う必要があると述べました。 理想的には、サービス間の通信が少ないほど好ましいということです。 ただし、バックエンド サービスは相互に依存して操作を完了することが多いため、常に回避できるとは限りません。
そこで、同期 HTTP 通信と非同期メッセージングを実装するためのさまざまなアプローチについて説明しました。 いずれのケースでも、通信コードの実装には開発者の負担が伴います。 通信コードの作業は複雑で時間がかかります。 意思決定を誤ると、パフォーマンスに大きな問題が生じる可能性もあります。
マイクロサービス通信に対する最新のアプローチは、"サービス メッシュ" という新しいテクノロジを中心にして、急速な進化しつつあります。 サービス メッシュは、サービス間の通信、回復性、および多数の横断的な問題を処理する機能が組み込まれた、構成可能なインフラストラクチャ レイヤーです。 それにより、これらの問題に対する責任は、マイクロサービスからサービス メッシュ レイヤーに移動されます。 通信がマイクロサービスから離されて抽象化されるのです。
サービス メッシュの重要なコンポーネントはプロキシです。 クラウドネイティブ アプリケーションでは、通常、プロキシのインスタンスは各マイクロサービスと併置されます。 実行は個別のプロセスで行われますが、両者は密接にリンクされ、同じライフサイクルを共有します。 このパターンは、サイドカー パターンと呼ばれます。図 4-24 は、これを示したものです。
図 4-24 サイド カーを使用したサービス メッシュ
上記の図で、各マイクロサービスと共に実行されるプロキシにより、メッセージがインターセプトされている点に注意してください。 各プロキシは、マイクロサービスに固有のトラフィック ルールを使用して構成できます。 それによりメッセージが認識され、サービスや外部との間でルーティングできます。
サービス メッシュでは、サービス間通信の管理だけでなく、サービス検出と負荷分散のサポートも提供されます。
いったん構成が完了したサービス メッシュはきわめて機能的です。 メッシュでは、サービス検出エンドポイントから、対応するインスタンスのプールを取得できます。 特定のサービス インスタンスに要求を送信し、結果の待機時間と応答の種類を記録できます。 最近の要求について監視された待機時間など、さまざまな要因に基づいて、高速の応答を返す可能性の高いインスタンスを選択できます。
サービス メッシュでは、トラフィック、通信、およびネットワークの問題がアプリケーション レベルで管理されます。 メッセージと要求が認識されるのです。 通常、サービス メッシュはコンテナー オーケストレーターと統合されます。 Kubernetes では、サービス メッシュを追加できる、拡張可能なアーキテクチャがサポートされています。
第 6 章では、サービス メッシュのアーキテクチャと使用可能なオープンソース実装など、サービス メッシュ テクノロジについて詳しく説明します。
まとめ
この章では、クラウドネイティブの通信パターンについて説明しました。 最初に、フロントエンド クライアントがバックエンド マイクロサービスとどのように通信するかについて説明しました。 その過程で、API ゲートウェイのプラットフォームとリアルタイム通信について説明しました。 次に、マイクロサービスが他のバックエンド サービスとどのように通信するかについて見ていきました。 サービス間での同期 HTTP 通信と非同期メッセージングについても説明しました。 クラウドネイティブ分野の新興テクノロジである、gRPC についても紹介しました。 最後に、マイクロサービス通信を効率化する新しいテクノロジとして急速に進化している、サービス メッシュについて紹介しました。
特に重点を置いて説明したのは、クラウドネイティブ システムでの通信の実装に役立つ、以下のマネージド Azure サービスでした。
- Azure Application Gateway
- Azure API Management
- Azure SignalR Service
- Azure Storage キュー
- Azure Service Bus
- Azure Event Grid
- Azure Event Hub
次は、クラウドネイティブ システムの分散データと、それがもたらす利点と課題について見ていきます。
リファレンス
.NET