全部產品
Search
文件中心

Alibaba Cloud Service Mesh:使用自適應配置推送最佳化提升控制平面推送效率

更新時間:May 31, 2025

當遇到控制平面向資料平面大量推送無關配置導致效率低下時,您可以藉助自適應配置推送最佳化功能來提升控制平面的推送效率。通過分析服務間的實際調用關係,該功能自動為服務產生最佳化後的Sidecar資源,僅為必要的服務推送必需的Sidecar配置,減少不必要的網路通訊,增強服務網格的效能和響應速度。

重要
  • 啟用自適應配置推送最佳化能力,ASM執行個體需為1.15.3.63及以上版本。關於升級執行個體的具體操作,請參見升級ASM執行個體

  • 自適應配置推送最佳化功能僅支援基於HTTP協議訪問的服務。

背景資訊

在預設情況下,由於不能確定網格內服務之間的調用依賴關係,Sidecar的配置中儲存了資料平面內所有服務的資訊。每次針對控制平面或資料平面的修改(例如在控制平面建立一條虛擬服務規則),都會導致控制平面向資料平面的所有Sidecar推送新的配置。

您可以通過開啟自適應配置推送最佳化功能,為服務自動建立用於配置推送最佳化的Sidecar資源。功能開啟後,叢集中會部署名為istio-axds-egressgateway的出口網關,所有HTTP流量初始都將導向該出口網關,並通過網關記錄的訪問日誌自動分析服務之間的依賴關係,無需您手動管理。關於應用Sidecar資源的配置推送最佳化效果,請參見應用Sidecar資源後的配置推送最佳化效果

前提條件

步驟一:開啟自適應配置推送最佳化功能

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇網格最佳化中心 > 自適應配置推送最佳化

  3. 自適應配置推送最佳化頁面,開啟啟用自適應配置推送最佳化開關,在確認對話方塊,單擊確定

    單擊確定後,在啟用自適應配置推送最佳化開關下方,會顯示更新中。更新完畢後,您可以看到啟用自適應配置推送最佳化開關已開啟,在開關下方會顯示可自適應最佳化的命名空間列表。

步驟二:為命名空間開啟自適應配置推送最佳化

為命名空間開啟自適應配置推送最佳化後,命名空間內的服務都將自動地進行基於Sidecar資源的配置推送最佳化。您也可以在服務的annotations中增加asm.alibabacloud.com/asm-adaptive-xds: true註解,單獨為服務啟用自適應配置推送最佳化。

  1. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇網格最佳化中心 > 自適應配置推送最佳化

  2. 自適應配置推送最佳化頁面的選擇自適應最佳化命名空間列表,開啟目標服務所在命名空間右側的開關(本文以default為例),然後在確認對話方塊,單擊確定

  3. 在網格詳情頁面左側導覽列,選擇流量管理中心 > Sidecar流量配置

  4. Sidecar流量配置頁面,查看Sidecar資源詳情。

    您可以看到自動建立且名稱以axds開頭的Sidecar資源。每個Sidecar資源對應前提條件中已部署的Bookinfo應用中的一個服務。Sidecar資源

步驟三:訪問應用,觸發自適應配置推送最佳化

  1. 擷取入口網關IP地址

  2. 在瀏覽器地址欄,輸入http://{入口網關的IP地址}/productpage地址,訪問Bookinfo應用。

    請將{入口網關的IP地址}替換為上一步擷取的IP地址。

  3. 查看自適應最佳化的Sidecar資源。

    1. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇流量管理中心 > Sidecar流量配置

    2. Sidecar流量配置頁面的axds-productpage右側,單擊操作列下方的查看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服務,無需您手動設定。

啟用自適應配置推送最佳化前後效能對比

以下將從命名空間asm-perf未開啟/開啟自適應配置推送最佳化時的兩種情境展開以下測試,以示範控制面以及資料面的配置下發效能:

  • 擴容工作負載:將httpbin從 2 個擴容到 400 個。

  • 發起測試流量:從sleep應用隨機向不同httpbin應用發起請求,觸發自適應配置的重新推送。

  • 重啟工作負載:觸發httpbin應用的重新部署,類比工作負載擴縮容、更新情境。

步驟一:環境準備

  1. 擷取樣本指令碼。

    git clone https://github.com/AliyunContainerService/asm-labs.git && \
      cd asm-labs/asm-perf/adativexds
  2. 構建測試環境。

    bash run.sh -s

    此命令將在叢集中建立以下資源:

    • 命名空間asm-perf

    • prometheusgrafana工作負載用於對工作負載進行監測。

    • 一個sleep應用和兩個副本的httpbin應用用於接收配置推送。

    您可以通過以下命令對監控大盤進行連接埠轉寄,通過訪問localhost:3000查看大盤。

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

步驟二:效能對比

  1. 擴容工作負載。

    bash run.sh -su

    等待一段時間後查看大盤,預期效果:

    未開啟自適應配置推送最佳化

    sleep應用CPU利用率

    image.png

    sleep應用記憶體佔用

    image.png

    sleep應用網路頻寬佔用

    image.png

    控制面流量變化
    1. 在網格執行個體的基本資料頁面,記錄Istio Pilot負載平衡後的CLB ID。

    2. 登入傳統型負載平衡CLB控制台。單擊對應CLB的監控列表徵圖,選擇監聽 > 頻寬/流量,查看監聽流量圖表。

      image.png

    可以看出,在網格內服務發生變化時,會觸發控制面的配置推送,產生一定的效能損耗。

    開啟自適應配置推送最佳化

    sleep應用CPU利用率

    image.png

    sleep應用記憶體佔用

    image.png

    sleep應用網路頻寬佔用

    image.png

    控制面流量變化

    image.png

    可以看出,在網格內服務發生變化時,會觸發控制面的配置推送,產生一定的效能損耗,但相對於未開啟自適應配置推送最佳化的情況,效能損耗有所降低。

    查看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: "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

      可以看到,spec.egress.hosts下有多個service。即只有以上 service 發生變化時會觸發sleep應用的配置重新推送。更多關於Sidecar資源對效能最佳化的影響,請參見應用Sidecar資源後的配置推送最佳化效果

  2. 發起測試流量。從sleep應用向不同的httpbin應用隨機發起共 100 個請求。

    bash run.sh -t

    請求結束後,再次查看大盤。

    未開啟自適應配置推送最佳化

    sleep應用CPU利用率

    image.png

    sleep應用記憶體佔用

    image

    sleep應用網路頻寬佔用

    image

    控制面流量變化

    image

    可以看出,在未開啟自適應配置推送最佳化的情況下,從sleep應用發起流量不會對配置下發造成影響,因為每個工作負載都擁有完整的配置。

    開啟自適應配置推送最佳化

    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: "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

      可以看到,spec.egress.hosts下有多個service。即只有以上 service 發生變化時會觸發sleep應用的配置重新推送。更多關於Sidecar資源對效能最佳化的影響,請參見應用Sidecar資源後的配置推送最佳化效果

  3. 重啟工作負載。

    bash run.sh -r

    等待所有工作負載都重啟完成後,查看控制面流量變化。

    未開啟自適應配置推送最佳化

    控制面流量變化

    image

    可以看出,在網格內服務發生變化時,會觸發控制面的配置推送,產生一定的效能損耗。

    開啟自適應配置推送最佳化

    控制面流量變化

    image

    可以看出,在重啟工作負載的情況下,相較於未開啟自適應配置推送最佳化,配置推送量大幅減小。

  4. 恢複測試環境。

    bash run.sh -sd

    需要2分鐘左右,httpbin應用Pod從400個縮容到2個,環境恢複到開始測試之前的狀態。

相關操作

關閉自適應配置推送最佳化功能

  1. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇網格最佳化中心 > 自適應配置推送最佳化

  2. 自適應配置推送最佳化頁面,關閉啟用自適應配置推送最佳化開關,在確認對話方塊,單擊確定

    單擊確定後,在啟用自適應配置推送最佳化開關下方,會顯示更新中。更新完畢後,您可以看到啟用自適應配置推送最佳化開關已關閉。

  3. 在網格詳情頁面左側導覽列,選擇流量管理中心 > Sidecar流量配置

    您可以看到由自適應配置推送最佳化功能建立出的Sidecar資源已被刪除。

修改出口網關配置

自適應配置推送最佳化功能開啟後,ACK叢集中會部署名為istio-axds-egressgateway的出口網關(可通過ACK控制台目的地組群的網路 > 服務頁面查看),所有HTTP流量初始都將導向該出口網關,並通過網關記錄的訪問日誌自動分析服務之間的依賴關係。您可以根據實際需求修改出口網關的配置,以適應不同的流量壓力。

  1. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇網格最佳化中心 > 自適應配置推送最佳化

  2. 自適應配置推送最佳化頁面,單擊出口網關配置頁簽,按需修改出口網關配置,然後單擊更新設定

    單擊更新設定後,服務網格將進入短暫的更新狀態。更新完畢後,您可以看到出口網關已更新為指定的配置。

    說明

    ASM支援修改的出口網關配置包括出口網關資源設定、網關副本數、是否開啟擴縮容HPA、網關擴縮容HPA的指標監控閾值、網關擴縮容HPA的最大副本數和最小副本數。