カスタムロードバランシングポリシー
独自の状況下でロードバランシングを最適化するのに、カスタムロードバランシングポリシーがどのように役立つかを説明します。
カスタムロードバランシングポリシー
概要
gRPCの主要な機能の1つはロードバランシングです。ロードバランシングにより、クライアントからのリクエストを複数のサーバーに分散できます。 これにより、1つのサーバーに過負荷がかかるのを防ぎ、サーバーを追加することでシステムをスケールアップできます。
gRPCロードバランシングポリシーには、名前リゾルバーによってサーバーのIPアドレスのリストが渡されます。 ポリシーは、サーバーへの接続(サブチャネル)を維持し、RPCが送信されたときに使用する接続を選択する役割を担います。
独自のポリシーの実装
デフォルトでは、`pick_first`ポリシーが使用されます。 このポリシーは実際にはロードバランシングを行いませんが、名前リゾルバーから取得した各アドレスを試して、接続できる最初のアドレスを使用します。 gRPCサービス設定を更新することで、取得したすべてのアドレスに接続し、各RPCの接続済みバックエンドをローテーションする`round_robin`を使用するように切り替えることもできます。 その他にも利用可能なロードバランシングポリシーがいくつかありますが、正確なセットは言語によって異なります。 組み込みのポリシーがニーズを満たさない場合は、独自のカスタムポリシーを実装することもできます。
これには、使用している言語でロードバランサーインターフェースを実装することが含まれます。 高レベルでは、次のことを行う必要があります。
- サービス設定から参照できるように、ロードバランサーレジストリに実装を登録します
- 実装のJSON設定オブジェクトを解析します。 これにより、サポートすることを選択した任意のJSONを使用して、サービス設定でロードバランサーを設定できます
- 接続を維持するバックエンドを管理します
- RPCが行われたときに接続するバックエンドを選択する`picker`を実装します。 これはRPC呼び出しパス上にあるため、高速な操作である必要があることに注意してください
- ロードバランサーを有効にするには、サービス設定で設定します
正確な手順は言語によって異なります。使用言語の具体的な例については、言語サポートセクションを参照してください。
バックエンドメトリクス
ロードバランシングポリシーがバックエンドサーバーで何が起こっているかをリアルタイムで知る必要がある場合はどうでしょうか? このためには、バックエンドメトリクスに依存できます。 バックエンドRPCレスポンスにインバンドで、またはバックエンドからの個別のRPCとしてアウトオブバンドで、メトリクスを提供できます。 CPUやメモリ使用率などの標準メトリクスが提供されていますが、独自のカスタムメトリクスを実装することもできます。
詳細については、カスタムバックエンドメトリクスガイド(TBD)を参照してください
サービスメッシュ
中央制御プレーンがマイクロサービスの構成を調整しているサービスメッシュのセットアップがある場合、サービス設定を介してカスタムロードバランサーを直接設定することはできません。 ただし、コントロールプレーンがgRPCクライアントと通信するために使用するxDSプロトコルでこれを行うためのサポートが提供されています。 カスタムロードバランシング構成がどのようにサポートされているかを判断するには、コントロールプレーンのドキュメントを参照してください。
詳細については、gRPCの提案A52を参照してください。
言語サポート
言語 | 例 | 備考 |
---|---|---|
Java | Javaの例 | |
Go | 例とxDSのサポートは近日公開予定です | |
C++ | まだサポートされていません |