すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Service Mesh:ピーク EWMA ロードバランシングシナリオの ASM Playground

最終更新日:Jan 13, 2025

このトピックでは、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 を変更して、現在のシナリオと対話することもできます。この例では、デモンストレーションのために次のプロセスが使用されます。

  1. テストトラフィックを開始します。この場合、デフォルトのロードバランサーが使用されます。

  2. モニタリングパネルを表示します。

  3. spec.scene.ewmaLb.enableEwmaForSimpleServer の値を true に変更して、simple-server サービスに対してピーク EWMA ロードバランサーを有効にします。

  4. テストトラフィックを再度開始し、テスト結果を以前のテスト結果と比較します。

ステップ 1:デフォルトのロードバランサーを使用してテストトラフィックを開始する

  1. kubeconfig ファイルの情報に基づいて kubectl を使用して playground インスタンスに接続し、次のコマンドを実行します。

    kubectl edit asmplayground default

    spec.scene.ewmaLb.testTrafficStartTimestamp の値を 1 に設定します(値はタイムスタンプまたは以前に使用されていない任意の数値に設定して、テストトラフィックを開始できます)。変更を保存して、テキストエディターを終了します。

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: ASMPlayground
    metadata:
      name: default
    spec:
      scene:
        ewmaLb:
          testTrafficStartTimestamp: 1
  2. 次のコマンドを実行して、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:モニタリングパネルを表示する

  1. 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]

    image

  2. 送信サービスセクションのダッシュボードを表示します。curl-job プレフィックスを持つ pod から simple-server サービスに送信されたトラフィックの P95 レイテンシが断続的に 1 秒を超えていることがわかります。これは、一部のトラフィックがロードバランシングアルゴリズムによってレイテンシの高いエンドポイント(simple-server-high-latency Deployment を使用してデプロイされた pod)にルーティングされるためです。

    image

ステップ 3:ピーク EWMA ロードバランサーを有効にする

  1. kubeconfig ファイルの情報に基づいて kubectl を使用して playground インスタンスに接続し、次のコマンドを実行します。

    kubectl edit asmplayground default

    spec.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
  2. 次のコマンドを実行して、デスティネーションルールの構成をクエリします。

    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:モニタリングパネルを表示する を参照してテスト結果を表示します。

image

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