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

Alibaba Cloud Service Mesh:適応型 xds 最適化によるコントロールプレーンのプッシュ効率向上

最終更新日:Jun 21, 2026

コントロールプレーンが大量の無関係な構成を非効率的にプッシュしている場合は、適応型 xds 最適化機能を使用してプッシュ効率を向上させることができます。この機能は、サービス間の呼び出し関係を分析して、最適化された Sidecar リソースを自動的に生成します。その後、必要な構成のみを対象のサービスにプッシュし、ネットワーク通信を削減してサービスメッシュのパフォーマンスと応答性を向上させます。

重要
  • 適応型 xds 最適化を有効にするには、ASM インスタンスのバージョンが 1.15.3.63 以降である必要があります。インスタンスのアップグレード方法の詳細については、「ASMインスタンスのアップグレード」をご参照ください。

  • 適応型 xds 最適化機能は、HTTP プロトコルを使用するサービスのみをサポートします。

背景情報

デフォルトでは、サービスメッシュはサービス間の呼び出し依存関係を判断できません。そのため、Sidecar 構成にはデータプレーン内のすべてのサービスに関する情報が保存されます。コントロールプレーンまたはデータプレーンへの変更 (コントロールプレーンでの新しい仮想サービスルールの作成など) が発生するたびに、コントロールプレーンはデータプレーン内のすべての Sidecar に新しい構成をプッシュします。

この問題に対処するため、適応型 xds 最適化機能を有効にすると、構成プッシュを最適化する Sidecar リソースが自動的に作成されます。この機能を有効にすると、istio-axds-egressgateway という名前の Egress ゲートウェイがクラスターにデプロイされます。すべての初期 HTTP トラフィックはこの Egress ゲートウェイに転送され、アクセスログに基づいてサービス依存関係が自動的に分析されます。このプロセスは完全に自動化されています。Sidecar リソースによる最適化効果の詳細については、「Sidecarリソースによる構成プッシュの最適化」をご参照ください。

前提条件

ステップ 1:適応型 xds 最適化の有効化

  1. ASM コンソール にログインします。左側のナビゲーションウィンドウで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、[メッシュ最適化センター] > [アダプティブ Xds 最適化] を選択します。

  3. Adaptive xds optimization ページで、Enable adaptive xds optimization スイッチをオンにします。Confirm ダイアログボックスで、OK をクリックします。

    OK をクリックすると、Enable adaptive xds optimization スイッチの下に Updating ステータスが表示されます。更新が完了すると、Enable adaptive xds optimization スイッチがオンになり、その下に適応型最適化が可能な名前空間のリストが表示されます。

ステップ 2:名前空間の最適化の有効化

名前空間で適応型 xds 最適化を有効にすると、この機能は Sidecar リソースを使用して、その名前空間内のすべてのサービスを自動的に最適化します。または、サービスのannotationsasm.alibabacloud.com/asm-adaptive-xds: trueを追加することで、特定のサービスでこの機能を有効にすることもできます。

  1. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、[メッシュ最適化センター] > [アダプティブ Xds 最適化] を選択します。

  2. Adaptive xds optimization ページの Select namespaces to be optimized リストで、対象サービスの名前空間の横にあるスイッチをオンにします。この例では、default 名前空間を使用します。Confirm ダイアログボックスで、OK をクリックします。

  3. ASM インスタンスの詳細ページで、左側のナビゲーションウィンドウの [トラフィック管理センター] > [sidecar トラフィック設定] を選択します。

  4. Sidecar Traffic Configuration ページで、Sidecar リソースの詳細を確認します。

    名前が axds で始まる、自動的に作成された Sidecar リソースが表示されます。各 Sidecar リソースは、前提条件でデプロイした Bookinfo アプリケーションのサービスに対応しています。ページには、axds-details (スコープ app:details)、axds-productpage (スコープ app:productpage)、axds-ratings (スコープ app:ratings)、axds-reviews (スコープ app:reviews) の 4 つの Sidecar リソースが表示されます。すべてのリソースの Source は System で、Namespace は default です。

ステップ 3:最適化のトリガー

  1. Ingress ゲートウェイの IP アドレスを取得します

  2. ブラウザーのアドレスバーに http://{Ingress ゲートウェイの IP アドレス}/productpage と入力して、Bookinfo アプリケーションにアクセスします。

    {Ingress ゲートウェイの IP アドレス} は、前のステップで取得した IP アドレスに置き換えてください。

  3. 適応型最適化された Sidecar リソースを確認します。

    1. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、[トラフィック管理センター] > [サイドカートラフィック設定] を選択します。

    2. Sidecar Traffic Configuration ページで、axds-productpage リソースを見つけ、Actions 列の View YAML をクリックします。以下は例です。

      apiVersion: networking.istio.io/v1beta1
      kind: Sidecar
      metadata:
        annotations:
          adapted-svc: productpage.default.svc.cluster.local
        creationTimestamp: '2024-01-05T07:52:56Z'
        generation: 4
        labels:
          asm-adaptive-xds-system: 'true'
          asm-system: 'true'
          provider: asm
        name: axds-productpage
        namespace: default
        resourceVersion: '23688435'
        uid: 753e3603-6bee-4dd1-b1fc-2e735a88****
      spec:
        egress:
          - hosts:
              - arms-prom/*
              - default/details.default.svc.cluster.local
              - default/kubernetes.default.svc.cluster.local
              - default/reviews.default.svc.cluster.local
              - istio-system/*
              - kube-system/*
        workloadSelector:
          labels:
            app: productpage

      Bookinfo アプリケーションにアクセスすると、productpage サービスを最適化するために生成された Sidecar リソース axds-productpage が、productpage サービスが依存する details サービスと reviews サービスを自動的に追加するため、手動設定は不要であることがわかります。

適応型 xds 最適化:パフォーマンスの比較

以下のテストでは、asm-perf 名前空間におけるコントロールプレーンとデータプレーンのパフォーマンスを、適応型 xds 最適化を無効にした場合と有効にした場合の 2 つのシナリオで比較します。

  • ワークロードのスケールアウト:httpbin Deployment を 2 レプリカから 400 レプリカにスケールアウトします。

  • テストトラフィックの開始:sleep アプリケーションから異なる httpbin アプリケーションにランダムなリクエストを送信し、新しい適応型構成プッシュをトリガーします。

  • ワークロードの再起動:httpbin アプリケーションの再デプロイをトリガーして、ワークロードのスケーリングと更新のシナリオをシミュレートします。

ステップ 1:環境の準備

  1. サンプルスクリプトリポジトリをクローンします。

    git clone https://github.com/AliyunContainerService/asm-labs.git && \
      cd asm-labs/asm-perf/adaptivexds
  2. テスト環境をセットアップします。

    bash run.sh -s

    このコマンドは、クラスターに次のリソースを作成します。

    • asm-perf 名前空間。

    • 監視用の prometheus および grafana ワークロード。

    • 1 つの sleep アプリケーションと、構成プッシュを受信する 2 レプリカの httpbin アプリケーション。

    次のコマンドを実行して、監視ダッシュボードへのポートフォワーディングを行います。その後、localhost:3000 にアクセスしてダッシュボードを表示できます。

    kubectl port-forward svc/grafana -n asm-perf 3000

ステップ 2:パフォーマンスの比較

  1. ワークロードをスケールアウトします。

    bash run.sh -su

    しばらく待ってから、ダッシュボードを確認します。以下のような結果になります。

    適応型 xds 最適化を無効にした場合

    sleep アプリケーションの CPU 使用率

    image.png

    sleep アプリケーションのメモリ使用量

    image.png

    sleep アプリケーションのネットワーク帯域幅

    image.png

    コントロールプレーンのトラフィック
    1. ASM インスタンスの Base Information ページで、Istio Pilot負荷バランス に関連付けられた CLB ID を記録します。

    2. Classic Load Balancer (CLB) コンソールにログインします。対応する CLB の モニタリング アイコンをクリックし、リスナー > [Bandwidth/Traffic] を選択して、[Listener Traffic] グラフを表示します。

      image.png

    メッシュ内のサービスが変更されると、コントロールプレーンが新しい構成をプッシュするため、パフォーマンスのオーバーヘッドが発生します。

    適応型 xds 最適化を有効にした場合

    sleep アプリケーションの CPU 使用率

    image.png

    sleep アプリケーションのメモリ使用量

    image.png

    sleep アプリケーションのネットワーク帯域幅

    image.png

    コントロールプレーンのトラフィック

    image.png

    メッシュ内のサービスが変更されると、コントロールプレーンが新しい構成をプッシュするため、パフォーマンスのオーバーヘッドが発生します。ただし、適応型 xds 最適化を無効にした場合と比較して、パフォーマンスへの影響は低くなります。

    Sidecar リソースの構成
    1. sleep アプリケーションのアクティブな Sidecar リソース構成を表示します。

      kubectl get sidecar axds-sleep -n asm-perf -o yaml

      期待される出力:

      apiVersion: networking.istio.io/v1
      kind: Sidecar
      metadata:
        annotations:
          adapted-svc: sleep.asm-perf.svc.cluster.local
        creationTimestamp: "2024-04-03T03:09:42Z"
        generation: 2
        labels:
          asm-adaptive-xds-system: "true"
          asm-system: "true"
          provider: asm
        name: axds-sleep
        namespace: asm-perf
        resourceVersion: "14844729886"
        uid: 31dfc081-b0ec-403f-b420-91f3c3e5f8fb
      spec:
        egress:
        - hosts:
          - arms-prom/*
          - asm-perf/grafana.asm-perf.svc.cluster.local
          - default/kubernetes.default.svc.cluster.local
          - istio-system/*
          - kube-system/*
        workloadSelector:
          labels:
            app: sleep

      spec.egress.hosts フィールドには複数のサービスがリストされています。これは、リストされているこれらのサービスへの変更のみが、sleep アプリケーションへの構成の再プッシュをトリガーすることを意味します。Sidecar リソースのパフォーマンスへの影響の詳細については、「Sidecarリソースによる構成プッシュの最適化」をご参照ください。

  2. テストトラフィックを開始します。sleep アプリケーションから異なる httpbin アプリケーションに合計 100 件のランダムなリクエストを送信します。

    bash run.sh -t

    リクエストが完了したら、再度ダッシュボードを確認します。

    適応型 xds 最適化を無効にした場合

    sleep アプリケーションの CPU 使用率

    image.png

    sleep アプリケーションのメモリ使用量

    image

    sleep アプリケーションのネットワーク帯域幅

    image

    コントロールプレーンのトラフィック

    image

    適応型 xds 最適化を無効にした場合、各ワークロードはすでに完全な構成を保持しているため、sleep アプリケーションからトラフィックを開始しても構成配信には影響しません。

    適応型 xds 最適化を有効にした場合

    sleep アプリケーションの CPU 使用率

    image

    sleep アプリケーションのメモリ使用量

    image

    sleep アプリケーションのネットワーク帯域幅

    image

    コントロールプレーンのトラフィック

    image.png

    sleep アプリケーションからトラフィックを開始すると、コントロールプレーンからの構成プッシュがトリガーされます。

    Sidecar リソースの構成
    1. sleep アプリケーションのアクティブな Sidecar リソース構成を表示します。

      kubectl get sidecar axds-sleep -n asm-perf -o yaml

      期待される出力:

      期待される出力:

      apiVersion: networking.istio.io/v1
      kind: Sidecar
      metadata:
        annotations:
          adapted-svc: sleep.asm-perf.svc.cluster.local
        creationTimestamp: "2024-04-03T05:26:00Z"
        generation: 90
        labels:
          asm-adaptive-xds-system: "true"
          asm-system: "true"
          provider: asm
        name: axds-sleep
        namespace: asm-perf
        resourceVersion: "14845598119"
        uid: a272cb0f-6e6a-492e-9ee1-b0d072813c19
      spec:
        egress:
        - hosts:
          - arms-prom/*
          - asm-perf/grafana.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v102.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v113.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v115.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v116.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v121.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v122.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v13.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v131.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v136.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v144.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v145.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v151.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v158.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v17.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v170.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v174.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v19.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v203.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v218.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v220.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v222.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v223.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v227.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v230.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v235.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v24.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v240.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v243.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v245.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v247.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v252.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v254.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v257.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v258.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v259.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v26.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v260.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v265.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v266.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v269.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v270.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v271.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v276.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v281.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v283.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v30.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v32.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v321.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v325.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v33.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v330.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v331.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v335.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v338.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v34.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v340.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v341.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v345.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v346.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v348.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v353.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v354.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v357.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v36.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v365.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v368.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v370.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v373.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v378.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v379.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v387.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v390.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v397.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v41.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v46.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v47.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v48.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v52.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v58.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v62.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v66.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v68.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v7.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v86.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v89.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v91.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v92.asm-perf.svc.cluster.local
          - asm-perf/httpbin-v94.asm-perf.svc.cluster.local
          - default/kubernetes.default.svc.cluster.local
          - istio-system/*
          - kube-system/*
        workloadSelector:
          labels:
            app: sleep

      spec.egress.hosts フィールドには複数のサービスがリストされています。これは、リストされているこれらのサービスへの変更のみが、sleep アプリケーションへの構成の再プッシュをトリガーすることを意味します。Sidecar リソースのパフォーマンスへの影響の詳細については、「Sidecarリソースによる構成プッシュの最適化」をご参照ください。

  3. ワークロードを再起動します。

    bash run.sh -r

    すべてのワークロードが再起動したら、コントロールプレーンのトラフィックの変化を確認します。

    適応型 xds 最適化を無効にした場合

    コントロールプレーンのトラフィック

    image

    メッシュ内のサービスが変更されると、コントロールプレーンが新しい構成をプッシュするため、パフォーマンスのオーバーヘッドが発生します。

    適応型 xds 最適化を有効にした場合

    コントロールプレーンのトラフィック

    image

    ワークロードを再起動する際、適応型 xds 最適化を無効にした場合と比較して、構成プッシュの量が大幅に削減されます。

  4. テスト環境を復元します。

    bash run.sh -sd

    httpbin アプリケーションの Pod が 400 から 2 にスケールダウンし、環境が初期状態に復元されるまでに約 2 分かかります。

関連操作

適応型 xds 最適化の無効化

  1. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、[メッシュ最適化センター] > [アダプティブ Xds 最適化] を選択します。

  2. Adaptive xds optimization ページで、Enable adaptive xds optimization スイッチをオフにします。Confirm ダイアログボックスで、OK をクリックします。

    OK をクリックすると、Enable adaptive xds optimization スイッチの下に Updating が表示されます。更新が完了すると、Enable adaptive xds optimization スイッチがオフになります。

  3. インスタンスの詳細ページで、左側メニューから Traffic Management Center > Sidecar Traffic Configuration を選択します。

    適応型 xds 最適化機能によって作成された Sidecar リソースが削除されています。

Egress ゲートウェイ構成の変更

適応型 xds 最適化を有効にすると、istio-axds-egressgateway という名前の Egress ゲートウェイが Container Service for Kubernetes (ACK) クラスターにデプロイされます。このゲートウェイは、ACK コンソールのターゲットクラスターの [Network] > [Services] ページで確認できます。すべての初期 HTTP トラフィックはこの Egress ゲートウェイに転送され、アクセスログからサービス依存関係が自動的に分析されます。必要に応じて、Egress ゲートウェイ構成を変更して、さまざまなトラフィック負荷に対応できます。

  1. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、[メッシュ最適化センター] > [アダプティブ Xds 最適化] を選択します。

  2. [Adaptive xds optimization] ページで、[Egress Gateway Configuration] タブをクリックします。必要に応じて Egress ゲートウェイ構成を変更し、Update Settings をクリックします。

    Update Settings をクリックすると、サービスメッシュは一時的に更新状態になります。更新が完了すると、Egress ゲートウェイは指定された構成で更新されます。

    説明

    ASM では、Egress ゲートウェイのリソース設定、ゲートウェイレプリカ数、HPA 自動スケーリングステータス、HPA メトリック監視しきい値、HPA レプリカの最大数と最小数を変更できます。