回復性のある通信
ヒント
このコンテンツは eBook の「Azure 向けクラウド ネイティブ .NET アプリケーションの設計」からの抜粋です。.NET Docs で閲覧できるほか、PDF として無料ダウンロードすると、オンラインで閲覧できます。
本書全体で、マイクロサービスベースのアーキテクチャ アプローチについて説明してきました。 このアーキテクチャには重要な利点がありますが、多くの課題もあります。
"プロセス外のネットワーク通信。 " 各マイクロサービスが通信に使用するネットワーク プロトコルでは、ネットワークの輻輳、待機時間、および一時的な障害が発生します。
サービス検出。 独自の IP アドレスとポートを持つマシンのクラスターに対して実行している場合、マイクロサービスはどのようにして互いを検出し、相互に通信しますか。
回復性。 短期間の障害を管理し、システムの安定性を維持するにはどうすればよいですか。
負荷分散。 受信トラフィックは、マイクロサービスの複数のインスタンスにどのように分散されますか。
セキュリティ。 トランスポートレベルの暗号化と証明書の管理などのセキュリティの考慮事項はどのように適用されますか。
"分散型監視。 " - 複数の利用側マイクロサービスにまたがる 1 つの要求について、どのように追跡可能性と監視を相互に関連付けてキャプチャしますか。
これらの考慮事項には、さまざまなライブラリやフレームワークで対処できますが、実装にはコストがかかり、複雑で時間が必要になることがあります。 また、インフラストラクチャに関する考慮事項をビジネス ロジックと組み合わせることもあります。
サービス メッシュ
より優れたアプローチは、"サービス メッシュ" と呼ばれる進化しつつあるテクノロジです。 サービス メッシュは、構成可能なインフラストラクチャ レイヤーであり、サービス通信やその他の前述の課題に対応する機能が組み込まれています。 考慮事項をサービス プロキシに移すことで、これらの考慮事項が切り離されます。 ビジネス コードから分離させるために、プロキシが別のプロセス (サイドカー) にデプロイされます。 ただし、サイドカーはサービスにリンクされています (それを使用して作成され、ライフサイクルを共有します)。 図 6-7 に、このシナリオを示します。
図 6-7。 サイドカーを使用したサービス メッシュ
前の図で、プロキシがマイクロサービスとクラスター間で通信をインターセプトして管理する方法に注意してください。
サービス メッシュは、データ プレーンとコントロール プレーンという 2 つの異なるコンポーネントに論理的に分割されます。 図 6-8 は、これらのコンポーネントとその役割を示しています。
図 6-8. サービス メッシュのコントロール プレーンとデータ プレーン
いったん構成が完了したサービス メッシュはきわめて機能的です。 サービス検出エンドポイントから、対応するインスタンスのプールを取得できます。 その後、メッシュは特定のインスタンスに要求を送信し、結果の待機時間と応答の種類を記録できます。 メッシュは、最近の要求について監視された待機時間など多くの要因に基づいて、高速の応答を返す可能性の高いインスタンスを選択できます。
インスタンスが応答しない場合、または失敗した場合、メッシュは別のインスタンスで要求を再試行します。 エラーが返された場合、メッシュは負荷分散プールでそのインスタンスを無効にし、復旧後にそのインスタンスを再度指定します。 要求がタイムアウトになった場合、メッシュは失敗し、要求を再試行することがあります。 メッシュは、メトリックと分散トレースをキャプチャして、一元管理されるメトリック システムに出力します。
Istio および Envoy
現在、いくつかのサービス メッシュ オプションが存在しますが、執筆時点で最も人気が高いのは Istio です。 Istio は、IBM、Google、および Lyft の共同事業です。 これは、新規または既存の分散アプリケーションに統合できるオープンソース製品です。 このテクノロジでは、マイクロサービスのセキュリティ保護、接続、監視を行うための一貫した完全なソリューションが提供されます。 次のような機能があります。
- 強力な ID ベースの認証と承認を使用した、クラスター内のサービス間通信のセキュリティ保護。
- HTTP、gRPC、WebSocket、および TCP トラフィックの自動負荷分散。
- 豊富なルーティング規則、再試行、フェールオーバー、およびフォールト インジェクションによる、トラフィックの動作のきめ細かい制御。
- アクセス制御、レート制限、クォータがサポートされる、プラグ可能なポリシー レイヤーおよび構成 API。
- クラスター内のすべてのトラフィック (クラスターのイングレスとエグレスを含む) の自動メトリック、ログ、およびトレース。
Istio 実装の重要なコンポーネントは、Envoy プロキシと呼ばれるプロキシ サービスです。 これは、各サービスと共に実行され、次の機能のためにプラットフォームに依存しない基盤を提供します。
- 動的サービス検出。
- 負荷分散。
- TLS 終了。
- HTTP および gRPC プロキシ。
- サーキット ブレーカーの回復性。
- 正常性チェック。
- カナリアのデプロイによるローリング アップデート。
既に説明したように、Envoy はクラスター内の各マイクロサービスにサイドカーとしてデプロイされます。
Azure Kubernetes Service との統合
Azure クラウドでは Istio が採用され、Azure Kubernetes Service 内で直接サポートが提供されます。 使い始めるにあたり、次のリンクを参考にしてください。
リファレンス
.NET