ヒント
このコンテンツは、Azure 用のクラウド ネイティブ .NET アプリケーションの設計に関する電子ブックからの抜粋であり、.NET Docs またはオフラインで読み取ることができる無料のダウンロード可能な PDF として入手できます。
この本では、マイクロサービス ベースのアーキテクチャ アプローチを採用しました。 このようなアーキテクチャは重要な利点を提供しますが、多くの課題があります。
プロセス外ネットワーク通信。 各マイクロサービスは、ネットワークの輻輳、待機時間、一時的な障害を導入するネットワーク プロトコルを介して通信します。
サービス検出。 マイクロサービスは、独自の IP アドレスとポートを使用してマシンのクラスター全体で実行されている場合に、どのように検出し、相互に通信しますか?
回復性。 有効期間の短い障害を管理し、システムを安定状態に保つ方法
負荷分散。 受信トラフィックは、マイクロサービスの複数のインスタンスにどのように分散されますか?
セキュリティ。 トランスポート レベルの暗号化や証明書管理などのセキュリティ上の問題はどのように適用されますか?
分散監視。 - 複数の使用するマイクロサービス間で 1 つの要求の追跡可能性と監視を関連付けてキャプチャする方法
これらの問題にはさまざまなライブラリとフレームワークで対処できますが、実装にはコストがかかり、複雑で時間がかかる場合があります。 また、最終的にインフラストラクチャの問題がビジネス ロジックに結び付けられます。
サービス メッシュ
より良いアプローチは、 Service Mesh という名前の進化するテクノロジです。 サービス メッシュは、サービス通信やその他の課題を処理する組み込み機能を備えた構成可能なインフラストラクチャ レイヤーです。 これらの懸念事項は、サービス プロキシに移動することで切り離されます。 プロキシは、ビジネス コードからの分離を提供するために、別のプロセス ( サイドカーと呼ばれます) にデプロイされます。 ただし、サイドカーはサービスにリンクされています。サイドカーはサービスと共に作成され、そのライフサイクルを共有します。 図 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 Services との統合
Azure クラウドは Istio を採用し、Azure Kubernetes Services 内で直接サポートします。 次のリンクを使用すると、作業を開始できます。
リファレンス
.NET