このトピックでは、Service Mesh(ASM)Playground を使用してピーク指数加重移動平均(EWMA)ロードバランシングシナリオを作成する方法と、シナリオにおける標準的なインタラクションプロセスについて説明します。
開始する前に、概要の内容をよく読んで理解していることを確認してください。
シナリオの概要
ピーク EWMA ロードバランサーは、エンドポイントステータスウェイトに基づいて ASM トラフィックを分散するためのロードバランサーです。このロードバランサーは、レイテンシの増加やリクエストの失敗など、パフォーマンスが低下したエンドポイントの一時的なウェイトを積極的に削減できます。これにより、アプリケーションの成功率が向上し、レイテンシが短縮されます。この機能により、ピーク EWMA ロードバランサーは、予期しないバックエンド例外への対処において、従来のロードバランサーよりも大幅に優れたパフォーマンスを発揮できます。このシナリオでは、simple-server サービスがデプロイされています。Deployments を使用して、2 つのバージョンのサービスがデプロイされています。simple-server-normal は通常バージョン、simple-server-high-latency は時折高レイテンシが発生するバージョンです。この例では、ロードバランシングアルゴリズムが切り替えられ、テストトラフィックが開始されます。モニタリングパネルでは、アプリケーションのレイテンシが時折増加するシナリオにおいて、ピーク EWMA ロードバランサーとデフォルトの LEAST_REQUEST ロードバランサーのパフォーマンスの違いを直感的に確認できます。次の図は、このシナリオにおける完全なトレースとデプロイトポロジを示しています。
シナリオを作成する
ewmaLb という playground ID を使用してシナリオを作成できます。詳細については、ASM Playground インスタンスの作成をご参照ください。
シナリオ操作方法
ASM Playground CRを使用してシナリオを操作する
ASM Playground カスタムリソース(CR)を使用して、playground インスタンスを制御できます。このシナリオでは、次のフィールドを使用できます。
フィールド | タイプ | 説明 |
spec.scene.ewmaLb.testTrafficStartTimestamp | int64 | テストトラフィックが開始されるタイムスタンプ。値を現在のタイムスタンプに変更することで、テストトラフィックを開始できます。0 以外の最後の数値とは異なる任意の数を指定できます。値が存在しない場合は、手動で追加できます。 |
spec.scene.ewmaLb.enableEwmaForSimpleServer | bool | simple-server サービスに対してピーク EWMA ロードバランサーを有効にするかどうかを指定します。このフィールドが true に設定されている場合、ASM Playground コントローラーは simple-server サービスのデスティネーションルールを作成し、ロードバランシングアルゴリズムを PEAK_EWMA に設定します。このフィールドが false に設定されている場合、デスティネーションルールはデプロイされず、デフォルトの LEAST_REQUEST アルゴリズムがロードバランシングに使用されます。 |
シナリオインタラクションの例
次のセクションでは、このシナリオにおける標準的なインタラクションプロセスについて説明します。次の手順を使用して、このシナリオを体験できます。ビジネス要件に基づいて ASM Playground CR を変更して、現在のシナリオと対話することもできます。この例では、デモンストレーションのために次のプロセスが使用されます。
テストトラフィックを開始します。この場合、デフォルトのロードバランサーが使用されます。
モニタリングパネルを表示します。
spec.scene.ewmaLb.enableEwmaForSimpleServerの値を true に変更して、simple-server サービスに対してピーク EWMA ロードバランサーを有効にします。テストトラフィックを再度開始し、テスト結果を以前のテスト結果と比較します。
ステップ 1:デフォルトのロードバランサーを使用してテストトラフィックを開始する
kubeconfig ファイルの情報に基づいて kubectl を使用して playground インスタンスに接続し、次のコマンドを実行します。
kubectl edit asmplayground defaultspec.scene.ewmaLb.testTrafficStartTimestampの値を 1 に設定します(値はタイムスタンプまたは以前に使用されていない任意の数値に設定して、テストトラフィックを開始できます)。変更を保存して、テキストエディターを終了します。apiVersion: istio.alibabacloud.com/v1beta1 kind: ASMPlayground metadata: name: default spec: scene: ewmaLb: testTrafficStartTimestamp: 1次のコマンドを実行して、playground インスタンスに関する pod 情報をクエリします。
kubectl get pod予期される出力:
NAME READY STATUS RESTARTS curl-job-npgbd 2/2 Running 0 simple-server-high-latency-7968d5978b-cnrqt 2/2 Running 0 simple-server-normal-66bd9d546-kvn2m 2/2 Running 0プレフィックスが
curl-jobである pod が開始されます。これは、テストトラフィックが開始されたことを示します。pod は 5 分間テストトラフィックを送信し続け、simple-serverサービスにアクセスします。
ステップ 2:モニタリングパネルを表示する
curl-jobプレフィックスを持つ pod がテストトラフィックを送信すると、playground インスタンスに組み込まれている Grafana モニタリングパネルで応答時間を確認できます。Grafana は、playground インスタンスのポート 3000 を介してインターネットに公開されています。kubeconfig ファイルの情報に基づいて kubectl を使用して playground インスタンスに接続し、次のコマンドを実行して Grafana の URL を取得できます。kubectl -n istio-system get svc istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}:3000'予期される出力:
xxx.xxx.xxx.xxx:3000この URL を使用して Grafana コンソールを開きます。[ダッシュボード] > [istio] > [istio ワークロードダッシュボード] を選択して、ワークロードモニタリングパネルを開きます。次に、次の設定に従ってフィルターを構成します。
[データソース]: [prometheus]
[名前空間]: [default]
[ワークロード]: [curl-job]
[レポーター]: [送信元と宛先]
[受信ワークロードの名前空間]: [すべて]
[受信ワークロード]: [すべて]
[宛先サービス]: [simple-server.default.svc.cluster.local]

送信サービスセクションのダッシュボードを表示します。
curl-jobプレフィックスを持つ pod からsimple-serverサービスに送信されたトラフィックの P95 レイテンシが断続的に 1 秒を超えていることがわかります。これは、一部のトラフィックがロードバランシングアルゴリズムによってレイテンシの高いエンドポイント(simple-server-high-latency Deploymentを使用してデプロイされた pod)にルーティングされるためです。
ステップ 3:ピーク EWMA ロードバランサーを有効にする
kubeconfig ファイルの情報に基づいて kubectl を使用して playground インスタンスに接続し、次のコマンドを実行します。
kubectl edit asmplayground defaultspec.scene.ewmaLb.enableEwmaForSimpleServerの値をtrueに設定します。変更を保存して、テキストエディターを終了します。apiVersion: istio.alibabacloud.com/v1beta1 kind: ASMPlayground metadata: name: default spec: scene: ewmaLb: testTrafficStartTimestamp: 1 enableEwmaForSimpleServer: true status: scene: ewmaLb: testTrafficStartTimestamp: 1次のコマンドを実行して、デスティネーションルールの構成をクエリします。
kubectl get destinationrule -o yaml予期される出力:
apiVersion: v1 items: - apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: creationTimestamp: "2024-07-18T01:33:26Z" generation: 1 labels: provider: asm name: simple-server namespace: default resourceVersion: "134230265" uid: bafdcd48-a90c-4b68-8517-9dbc99dcb94e spec: host: simple-server.default.svc.cluster.local trafficPolicy: loadBalancer: simple: PEAK_EWMA kind: List metadata: resourceVersion: ""出力は、
simple-serverという名前のデスティネーションルールがインスタンスにデプロイされ、ロードバランサーがPEAK_EWMAであることを示しています。
ステップ 4:テストトラフィックを再度開始し、テスト結果を以前のテスト結果と比較する
ステップ 1:デフォルトのロードバランサーを使用してテストトラフィックを開始する の操作を再度実行してテストを開始し、ステップ 2:モニタリングパネルを表示する を参照してテスト結果を表示します。

出力は、P95 レイテンシが大幅に短縮されたことを示しています。これは、ピーク EWMA ロードバランサーがエンドポイントでレイテンシまたはエラー率の増加を検出すると、一定期間そのエンドポイントのウェイトを削減するため、より多くのリクエストが負荷の normale なエンドポイントにルーティングされるためです。これにより、全体的なレイテンシが短縮され、サービスのパフォーマンスが大幅に向上します。