全部產品
Search
文件中心

Alibaba Cloud Service Mesh:使用ASM流量調度套件進行分布式系統流量控制

更新時間:Oct 26, 2024

ASM流量調度套件提供了一個對業務無侵入、可擴充的流量動態調度架構,用於統一管理和控制分布式系統中的所有流量,以達到增強雲原生分布式應用的可靠性、最佳化分布式應用成本和資源使用率等目的。本文介紹ASM流量調度套件的概念和相關功能。

什麼是ASM流量調度套件

ASM流量調度套件是基於服務網格的流量統一調度架構模式,以及基於該架構模式開發的多種流量調度策略的統稱,旨在對雲原生分布式應用中的請求進行統一的負載調度與管理。這些能力可以增強雲原生分布式應用的可靠性,同時最佳化成本和資源利用效率。

ASM流量調度套件的核心架構主要包括ASM請求調度控制器和ASM請求調度Agent。當Sidecar轉寄Pod的出站或入站請求時,將與ASM請求調度Agent進行互動,並從Agent處擷取流量調度決策,進而對請求進行限流、排隊等調度行為。ASM流量調度套件提供一系列預置的流量調度策略,這些策略將經過ASM請求調度控制器向ASM請求調度Agent進行發布,以動態控制流程量負載的調度行為。

開啟ASM流量調度套件

說明
  • 啟用ASM流量管理套件前請確認資料面叢集中存在一個名稱為alibabacloud-cnfs-nas的storageclasses。關於建立儲存類,請參見儲存類(StorageClass)

  • Container Service Serverless 版暫不支援開啟ASM流量調度套件。

要使用ASM流量調度套件,首先需要確保ASM執行個體版本在1.21.6.82及以上,並且已經向ASM執行個體中添加Kubernetes叢集。具體操作,請參見添加叢集到ASM執行個體

開啟ASM流量調度套件的步驟如下:

  1. 使用kubectl串連到ASM執行個體,具體操作,請參見通過控制面kubectl訪問Istio資源

  2. 執行以下命令。

    kubectl patch asmmeshconfig default --type=merge --patch='{"spec":{"adaptiveSchedulerConfiguration":{"enabled":true,"schedulerScopes":[{"namespace":"default"}]}}}'

ASM流量調度套件支援的流量調度策略

ASM流量調度套件當前支援流量速率限制和請求優先順序調度兩種策略。

策略

說明

相關文檔

流量速率限制

流量速率限制策略即RateLimtingPolicy。此策略提供針對網格內指定服務服務提供全域限流能力,相比Istio社區限流方案增加分使用者限流、設定突發流量視窗、自訂請求token消耗速率等進階限流功能。

使用RateLimitingPolicy實現分使用者限流情境

基於平均延遲的請求優先順序調度

基於平均延遲的請求優先順序調度策略通過將即時延遲和歷史平均值進行比較來檢測流量過載,並通過令牌桶和優先順序機制來對請求進行調度。當系統發生過載時,優先順序高的請求能夠更快地被處理。

使用AverageLatencySchedulingPolicy實現請求優先順序調度

並發度控制

並發度控制會維護正在處理的請求記錄(即已經發送但尚未響應的請求),當正在處理的請求數量超過指定限制時,拒絕後續到來的請求。

使用ConcurrencyLimitingPolicy實現請求並發數控制

可控並發下的請求優先順序調度

通過指定的並發數限制來判斷流量是否過載,當請求並發數超過指定上限後,後續請求將被排隊並根據請求優先順序進行調度。

使用ConcurrencySchedulingPolicy實現可控並發下的請求優先順序調度

服務漸進式上線策略

ASM流量管理套件支援服務漸進式上線策略。當新服務發布時,通過同步配置漸進式上線策略可以使得服務接收到的流量逐漸增加,確保服務平穩上線。

使用LoadRampingPolicy實現服務漸進式上線

指定請求調用配額下的請求優先順序調度

當系統中正在處理的請求速率超過指定的配額時,後續的請求將會被排隊,同時優先順序更高的請求能夠被更快地處理。

使用QuotaSchedulingPolicy實現請求調用配額管理

配置採集ASM流量調度套件相關指標

如果您的Kubernetes叢集整合了阿里雲可觀測監控Prometheus版或自建Prometheus執行個體,您可以通過以下方式配置採集ASM請求調度Agent的監控指標,以監控ASM流量調度套件中各個策略對流量的調度控制行為。

阿里雲可觀測監控Prometheus版

您可以使用以下內容新增自訂採集規則。具體操作,請參見其它Prometheus服務發現配置

scrape_configs:
- job_name: asm-adaptive-scheduler-stats
  scrape_interval: 30s
  scrape_timeout: 30s
  metrics_path: /metrics
  scheme: http
  kubernetes_sd_configs:
  - role: pod
  relabel_configs:
  - source_labels:
    - __meta_kubernetes_namespace
    action: keep
    regex: istio-system
  - source_labels:
    - __meta_kubernetes_pod_container_port_name
    action: keep
    regex: server
  - source_labels:
    - __meta_kubernetes_pod_container_name
    action: keep
    regex: aperture-agent

自建Prometheus執行個體

您需要將阿里雲可觀測監控Prometheus版中的JSON內容添加到Prometheus執行個體的scrape_configs配置中。具體操作,請參見Prometheus configuration