本文介紹網格優化中心的作用及相關功能。
功能介紹
Service Mesh是一種用于管理微服務架構中網絡通信的解決方案,通過在每個服務實例中添加代理,實現流量控制、服務發現、負載均衡等功能。雖然Service Mesh能夠提供很多強大的功能,但也存在一些性能問題,例如:
延遲增加:Service Mesh中每個服務的請求都必須經過一系列的代理,在代理的處理過程中會增加一定的延遲。
資源占用增加:每個代理都需要一定的CPU、內存等資源,因此隨著服務數量的增加,代理的資源占用也會相應增加。
若開啟TLS安全機制,Service Mesh中的代理會對流量進行加密和解密,將消耗一定的資源。
在實際使用中,需要根據具體情況進行選擇和優化,以達到更好的性能和用戶體驗。阿里云服務網格ASM通過多維度、不同層面的性能優化手段來構建網格優化中心,提升產品的性能指標與高可用性:
一、收斂服務發現的范圍,提升網格配置的推送效率
在Istio中,可以通過以下幾種方式收斂服務發現的范圍,從而提高控制平面推送網格配置的效率。通過收斂服務發現范圍,可以達到如下目標,包括有效降低控制面組件CPU資源消耗與內存資源消耗、有效降低控制面組件與網格代理之間的通信時的帶寬資源消耗。
通過Discovery Selector可以定義一組過濾規則,用于篩選出需要同步到控制平面的服務發現信息:
基于命名空間范圍的篩選,自動發現數據面Kubernetes集群中指定命名空間下的服務。
與Istiod直接交互,有效提升控制面的處理效率。
此外,通過exportTo
與workloadSelector
來收斂規則配置的范圍,既可以支持全局設置(MeshConfig)或命名級別設置,又可以支持細粒度設置(perservice/config)。定義的內容示例如下圖所示。
exportTo
:用于控制規則(VirtualService、DestinationRule、ServiceEntry等)的可用性范圍。workloadSelector
:用于配置規則(DestinationRule、ServiceEntry、EnvoyFilter、Sidecar)適用的服務范圍。
ASM提供了對應的功能。如下圖所示,您可以通過選中或取消選中命名空間來定義服務發現的范圍。
如下圖所示,您也可以通過編輯標簽選擇器的方式選擇對應的命名空間下的服務。如果數據面Kubernetes集群的命名空間與任一標簽選擇器匹配,該命名空間下的服務將被包括在自動發現范圍之內。同時,數據面Kubernetes集群的命名空間必須與每個標簽選擇器中定義的所有規則相符,才能被該選擇器選中。更多信息,請參見配置服務發現范圍提升網格配置的推送效率。
二、基于訪問日志分析自動推薦生成Sidecar對象,以減少代理資源消耗
此優化方案基于xDS和Sidecar對象實現。
xDS協議是X Discovery Service的簡寫,是Service Mesh控制面和數據面Sidecar Proxy之間的通信協議。x表示包含多種協議的集合,例如:LDS表示監聽器的發現,CDS表示服務和版本的信息,EDS表示服務和版本有哪些實例,以及每個服務實例的特征信息,RDS表示路由的發現。
xDS協議是網格代理獲取配置信息的傳輸協議,也是Istio與網格代理連接的橋梁。xDS可以簡單理解為網格內的服務發現數據和治理規則的集合。xDS數據量的大小和網格規模呈正相關。
默認情況下,下發xDS使用的是全量下發策略,即網格里的所有網格代理內存里都會有整個網格內所有的服務發現數據。
在大多數情況下,在大規模集群中的一個簡單的工作負載可能只與少數其他工作負載進行通信。將它的配置更改為僅包含一組必要的服務會對網格代理的內存占用產生較大影響。Sidecar資源對象可以幫助定義這種配置約束關系。
基于訪問日志分析自動推薦生成Sidecar資源對象的工作實現原理如下:
通過分析數據平面網格代理產生的訪問日志獲取數據平面服務之間的調用依賴關系,為數據平面中的每個工作負載自動推薦生成相應的Sidecar資源對象。
根據分析結果生成出Sidecar資源對象之后,允許用戶進行二次確認,或者用戶基于自動生成的內容進行定制修改。
適用場景為已存在服務調用的日志數據,且現有業務服務的調用依賴關系變化不大,通過該方式可以一次性地實現優化。以bookinfo書評應用為例,通過幾次請求之后,每個網格代理都會產生對應的訪問日志。以productpage服務為例,生成的推薦的Sidecar資源對象內容如下:
使用該功能的前提條件如下:
依賴用戶開通日志服務來采集訪問日志內容,并要求產生的日志需要覆蓋全部業務調用,才能得到全部的依賴關系。一旦某業務路徑沒有調用產生日志,則很有可能丟失對應的服務依賴關系,從而導致生成的Sidecar資源對象定義內容不準確,進而可能導致之后的該業務路徑訪問調用不通。
如下圖所示,ASM提供了使用基于訪問日志分析自動推薦的Sidecar資源對象來提升xDS推送的效率。更多信息,請參見使用基于訪問日志分析自動推薦的Sidecar資源。
三、AdaptiveXDS:自適應配置推送優化
為了緩解上述方案中的局限性,ASM提供了另外一種優化手段,即按需推送xDS配置的能力,自適應應用服務的變更。
自適應配置推送優化根據網格內服務的訪問日志分析服務之間的依賴關系,并自動為服務生成Sidecar資源對象以優化針對該服務工作負載的配置推送。功能開啟后,集群中會部署名為istio-axds-egressgateway的出口網關,服務之間調用的所有HTTP流量初始都將指向該出口網關,并通過網關記錄的訪問日志自動分析服務之間的依賴關系。
通過如下架構圖可以看到:
在托管側,Adaptive XdsController組件負責管理AdaptiveXds-EgressGateway的生命周期、生成AdaptiveXds-EgressGateway所需的EnvoyFilter及Bootstrap配置等。
啟用該功能之后,AdaptiveXds-EgressGateway會上報訪問日志到Access Log Service(ALS)服務。
Access Log Service(ALS)負責接收網格代理發送的日志數據,并結合ALSAnalyzer分析日志內容,然后根據服務調用依賴關系生成對應的Sidecar資源對象。
為集群內的服務啟用自適應配置推送優化能力,可以按照命名空間范圍進行開啟。開啟后,命名空間內的服務都將自動地進行基于Sidecar資源對象的配置推送優化。
此外,您也可以在Kubernetes服務的annotations
中增加asm.alibabacloud.com/asm-adaptive-xds: true
注解以單獨為該服務打開優化選項。
在使用ASM產品的某客戶場景中,通過該方式優化之后,網格代理中的配置減少了90%,所消耗的內存消耗從400 MB減少到50 MB。
ASM提供自適應配置推送優化提升xDS推送的效率以及減少網格代理的不必要配置。更多信息,請參見使用自適應配置推送優化提升控制平面推送效率。
四、軟硬結合性能優化的持續推進
數據面的形態是多樣的,運行的ECS規格型號、OS的版本等都不盡相同。通過探測節點的特征,可以更好地理解節點所具備的支撐能力,例如可以根據Kernel版本判斷是否支持eBPF的相關功能,根據是否支持AVX擴展指令集決定開啟TLS加解密處理能力,或者判斷是否提供了Device Plugin等。
也就是說,通過檢測Kubernetes集群中每個節點上可用的硬件功能特征,包括CPUID特征、指令集擴展等,然后根據探測到的特征,自適應動態配置相應的特性,自適應啟用或禁用對應特性,整個過程對用戶無感知。
采用此方式,可以充分利用用戶使用的節點環境,動態啟用這些特性,從而提升相應的能力。ASM支持根據是否支持AVX指令集動態啟用Multi-Buffer特性,提升TLS加解密性能。更多信息,請參見基于英特爾架構的阿里云服務網格ASM技術加速應用服務加密通。
具體來說:
在服務網格控制面,通過擴展MeshConfig或者CRD方式,為您提供統一的聲明式配置定義。
控制面的配置通過xDS協議下發到數據面Envoy代理。這一部分也是ASM產品中的一些擴展能力。
工作負載Pod的調度優先與自適應動態配置。通過對節點的特征標識,ASM優先將啟動Multi-Buffer功能的Pod調度到對應的節點上,從而使相關的功能能夠被啟用。除了調度之外,ASM產品支持自適應動態配置能力,即使沒有對應的節點可調度,這些Pod在其他節點上部署時,也能夠自適應去禁用這些功能。
五、資源超賣模式下的支持
在Kubernetes系統中,Kubelet通過參考Pod的QoS等級來管理單機容器的資源質量,例如OOM(Out of Memory)優先級控制等。Pod的QoS級別分為Guaranteed、Burstable和BestEffort。QoS級別取決于Pod配置的Request和Limit(CPU、內存)。
ack-koordinator提供動態資源超賣功能,通過對節點負載數據的實時收集,可以充分挖掘集群中已分配但未使用的資源量,以實現對集群資源的動態超賣。
一般不強制資源限制和所需資源配置為相同值。建議您參照工作負載類型,對資源限制和所需資源進行配置。
若QoS為Guaranteed類型的工作負載,建議您兩者配置為相同值。
若為其他類型的Pod,建議您保持與原生資源類型中所需資源小于資源限制的約定。
ASM支持設置注入的Istio代理以及isito-init初始化容器的ACK動態超賣資源。更多信息,請參見配置Sidecar代理和在Sidecar中配置ACK動態超賣資源。