All Products
Search
Document Center

Alibaba Cloud Service Mesh:Improving control plane push efficiency with adaptive xds optimization

Last Updated:Jun 20, 2026

If your control plane inefficiently pushes large volumes of irrelevant configurations, use the adaptive xds optimization feature to improve push efficiency. This feature analyzes service call relationships to automatically generate optimized sidecar resources. It then pushes only necessary configurations to the required services, reducing network communication and enhancing the performance and responsiveness of your service mesh.

Important
  • To enable adaptive xds optimization, your ASM instance must be version 1.15.3.63 or later. For more information about how to upgrade an instance, see Upgrade an ASM instance.

  • The adaptive xds optimization feature supports only services that use the HTTP protocol.

Background information

By default, the service mesh cannot determine the call dependencies between services. Therefore, the sidecar configuration stores information about all services in the data plane. Every change to the control plane or data plane, such as creating a new virtual service rule in the control plane, causes the control plane to push new configurations to all sidecars in the data plane.

To address this, enable the adaptive xds optimization feature to automatically create sidecar resources that optimize configuration pushes. After you enable this feature, an egress gateway named istio-axds-egressgateway is deployed in the cluster. All initial HTTP traffic is directed to this egress gateway, which automatically analyzes service dependencies based on access logs. This process is fully automatic. For more information about the optimization effects of applying sidecar resources, see Configuration push optimization with sidecar resources.

Prerequisites

Step 1: Enable adaptive xds optimization

  1. Log on to the ASM console. In the left-side navigation pane, choose Service Mesh > Mesh Management.

  2. On the Mesh Management page, click the name of the ASM instance. In the left-side navigation pane, choose Mesh Optimization Center > Adaptive xds optimization.

  3. On the Adaptive xds optimization page, turn on the Enable adaptive xds optimization switch. In the Confirm dialog box, click OK.

    After you click OK, the status Updating is displayed below the Enable adaptive xds optimization switch. When the update is complete, the Enable adaptive xds optimization switch is turned on and a list of namespaces that can be adaptively optimized is displayed below it.

Step 2: Enable namespace optimization

When you enable adaptive xds optimization for a namespace, the feature automatically optimizes all services within it by using sidecar resources. Alternatively, you can enable this feature for a specific service by adding the asm.alibabacloud.com/asm-adaptive-xds: true annotation to the service's annotations.

  1. On the Mesh Management page, click the name of the ASM instance. In the left-side navigation pane, choose Mesh Optimization Center > Adaptive xds optimization.

  2. On the Adaptive xds optimization page, in the Select namespaces to be optimized list, turn on the switch next to the target service's namespace. This example uses the default namespace. In the Confirm dialog box, click OK.

  3. On the details page of the ASM instance, choose Traffic Management Center > Sidecar Traffic Configuration in the left-side navigation pane.

  4. On the Sidecar Traffic Configuration page, view the details of the sidecar resources.

    You can see automatically created sidecar resources whose names start with axds. Each sidecar resource corresponds to a service in the Bookinfo application that you deployed as part of the prerequisites. The page displays four sidecar resources: axds-details (scope app:details), axds-productpage (scope app:productpage), axds-ratings (scope app:ratings), and axds-reviews (scope app:reviews). The Source for all resources is System, and the Namespace is default.

Step 3: Trigger optimization

  1. Get the IP address of the ingress gateway.

  2. In the address bar of your browser, enter http://{IP address of the ingress gateway}/productpage to access the Bookinfo application.

    Replace {IP address of the ingress gateway} with the IP address you obtained in the previous step.

  3. Verify the adaptively optimized sidecar resource.

    1. On the Mesh Management page, click the name of the ASM instance. In the left-side navigation pane, choose Traffic Management Center > Sidecar Traffic Configuration.

    2. On the Sidecar Traffic Configuration page, find the axds-productpage resource and click View YAML in the Actions column. The following is an example.

      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

      You can see that after you access the Bookinfo application, the Sidecar resource axds-productpage, which is generated to optimize the productpage service, has automatically added the details and reviews services that the productpage service depends on, and no manual configuration is required.

Adaptive xds optimization: performance comparison

The following tests compare control plane and data plane performance in the asm-perf namespace in two scenarios: with adaptive xds optimization disabled and with it enabled.

  • Scale out a workload: Scale out the httpbin deployment from 2 to 400 replicas.

  • Initiate test traffic: Send random requests from the sleep application to different httpbin applications to trigger a new adaptive configuration push.

  • Restart a workload: Trigger a redeployment of the httpbin application to simulate workload scaling and update scenarios.

Step 1: Prepare the environment

  1. Clone the sample script repository.

    git clone https://github.com/AliyunContainerService/asm-labs.git && \
      cd asm-labs/asm-perf/adativexds
  2. Set up the test environment.

    bash run.sh -s

    This command creates the following resources in your cluster:

    • The asm-perf namespace.

    • prometheus and grafana workloads for monitoring.

    • One sleep application and an httpbin application with two replicas to receive configuration pushes.

    Run the following command to forward a port to the monitoring dashboard. You can then access the dashboard by visiting localhost:3000.

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

Step 2: Compare performance

  1. Scale out the workload.

    bash run.sh -su

    Wait for a moment and then check the dashboard. The following results are expected:

    Without adaptive xds optimization

    Sleep application CPU utilization

    image.png

    Sleep application memory usage

    image.png

    Sleep application network bandwidth

    image.png

    Control plane traffic
    1. On the Base Information page of the ASM instance, record the CLB ID associated with the CLB Instance for Exposing Istio Pilot.

    2. Log on to the Classic Load Balancer (CLB) console. Click the Monitoring icon for the corresponding CLB, choose Listener > Bandwidth/Traffic, and view the Listener Traffic chart.

      image.png

    When services in the mesh change, the control plane pushes new configurations, which incurs some performance overhead.

    With adaptive xds optimization

    Sleep application CPU utilization

    image.png

    Sleep application memory usage

    image.png

    Sleep application network bandwidth

    image.png

    Control plane traffic

    image.png

    When services in the mesh change, the control plane pushes new configurations, which incurs some performance overhead. However, the performance impact is lower compared to the scenario where adaptive xds optimization is disabled.

    Sidecar resource configuration
    1. View the active sidecar resource configuration for the sleep application.

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

      Expected output:

      apiVersion: networking.istio.io/v1
      kind: Sidecar
      metadata:
        annotations:
          adapted-svc: sleep.asm-perf.svc.cluster.local
        creationTimestamp: "2025-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

      The spec.egress.hosts field lists multiple services. This means that only changes to these listed services will trigger a configuration re-push to the sleep application. For more information about the performance impact of sidecar resources, see Configuration push optimization with sidecar resources.

  2. Initiate test traffic. Send a total of 100 random requests from the sleep application to different httpbin applications.

    bash run.sh -t

    After the requests are complete, check the dashboard again.

    Without adaptive xds optimization

    Sleep application CPU utilization

    image.png

    Sleep application memory usage

    image

    Sleep application network bandwidth

    image

    Control plane traffic

    image

    When adaptive xds optimization is disabled, initiating traffic from the sleep application does not affect configuration delivery because each workload already possesses the complete configuration.

    With adaptive xds optimization

    Sleep application CPU utilization

    image

    Sleep application memory usage

    image

    Sleep application network bandwidth

    image

    Control plane traffic

    image.png

    Initiating traffic from the sleep application triggers configuration pushes from the control plane.

    Sidecar resource configuration
    1. View the active sidecar resource configuration for the sleep application.

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

      Expected output:

      Expected output

      apiVersion: networking.istio.io/v1
      kind: Sidecar
      metadata:
        annotations:
          adapted-svc: sleep.asm-perf.svc.cluster.local
        creationTimestamp: "2025-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

      The spec.egress.hosts field lists multiple services. This means that only changes to these listed services will trigger a configuration re-push to the sleep application. For more information about the performance impact of sidecar resources, see Configuration push optimization with sidecar resources.

  3. Restart the workload.

    bash run.sh -r

    After all workloads have restarted, check the control plane traffic changes.

    Without adaptive xds optimization

    Control plane traffic

    image

    When services in the mesh change, the control plane pushes new configurations, which incurs some performance overhead.

    With adaptive xds optimization

    Control plane traffic

    image

    When restarting workloads, the volume of configuration pushes is significantly reduced compared to the scenario where adaptive xds optimization is disabled.

  4. Restore the test environment.

    bash run.sh -sd

    It takes about two minutes for the httpbin application pods to scale down from 400 to 2, restoring the environment to its initial state.

Related operations

Disable adaptive xds optimization

  1. On the Mesh Management page, click the name of the ASM instance. In the left-side navigation pane, choose Mesh Optimization Center > Adaptive xds optimization.

  2. On the Adaptive xds optimization page, turn off the Enable adaptive xds optimization switch. In the Confirm dialog box, click OK.

    After you click OK, Updating is displayed below the Enable adaptive xds optimization switch. After the update is complete, the Enable adaptive xds optimization switch is turned off.

  3. On the instance details page, in the navigation pane on the left, choose Traffic Management Center > Sidecar Traffic Configuration.

    The sidecar resources created by the adaptive xds optimization feature are now deleted.

Modify egress gateway configuration

Enabling adaptive xds optimization deploys an egress gateway named istio-axds-egressgateway to your ACK cluster. This gateway is visible on the Network > Services page of your target cluster in the ACK console. All initial HTTP traffic is directed to this egress gateway, which automatically analyzes service dependencies from its access logs. You can modify the egress gateway configuration to handle different traffic loads as needed.

  1. On the Mesh Management page, click the name of the ASM instance. In the left-side navigation pane, choose Mesh Optimization Center > Adaptive xds optimization.

  2. On the Adaptive xds optimization page, click the Egress Gateway Configuration tab. Modify the egress gateway configuration as needed, and then click Update Settings.

    After you click Update Settings, the service mesh enters a brief updating state. When the update is complete, the egress gateway will be updated with the specified configuration.

    Note

    ASM allows you to modify the egress gateway's resource settings, number of gateway replicas, HPA auto-scaling status, HPA metric monitoring thresholds, and the maximum and minimum number of HPA replicas.