本文整理自阿里雲高級技術專家王夕寧撰寫的《Istio服務網格技術解析與實戰》一書以及阿里雲服務網格產品ASM最新發布內容,針對服務網格的未來發展、服務網格技術帶來的優勢以及對業內首個全託管Istio兼容服務網格產品ASM進行了詳細的介紹。
雲計算已成為企業應用程式的主要範式。隨著企業使其計算和網絡架構現代化,雲原生架構是主要的目標環境。雲原生開源技術圈流行一句話:「infrastructure should be boring」,即IT基礎設施相關技術逐漸趨於穩定。Open Container Initialitive(簡稱OCI)組織的出現,以及以containerd/runc為代表的基礎容器運行時參考實現的廣泛採用,標誌著雲原生時代的第一層基礎設施的穩定化。而Kubernetes在容器編排領域的勝出,則代表了雲原生時代的第二層技術設施的穩定化。
這些底層技術的穩定使得生態系統內的其他廠商有信心在相關技術上繼續投入,同樣也使得終端用戶有信心嘗試和採用雲原生、微服務技術,更為重要的是為雲原生生態內上層技術的繁榮帶來強大的助推作用。
以Kubernetes API為基礎,在CNCF社區中出現了大量Kubernetes-Native的上層技術,包括Service Mesh類的Istio、服務無計算/函數計算類的Knative項目、快速部署管理深度學習框架的KubeFlow項目、複雜應用定義與管理類的Ksonnet、Helm項目等。這些上層技術的出現使得雲原生可以被應用到更為廣泛的場景中,除了常見的無狀態/有狀態應用之外,也包括無伺服器、AI、大數據等多種場景,並反過來推進了Kubernetes等雲原生技術的進一步推廣。
在雲原生行業服務網格Service Mesh計劃的進展中,最值得注意的是,Istio、Envoy和LinkerD將提升這些項目在企業多雲(multi-cloud)計算中的顯著性。到2020年,許多企業將開始把服務網格納入其努力的核心,即在其分布式計算環境中,在容器化本地資源和越來越多的公有和私有雲結構之間搭建靈活的橋梁。雲提供商將加強對託管服務的支持,這些託管服務簡化了通過網格和中心輻條架構對數千個虛擬私有雲和內部網絡的互聯和管理。毫無疑問,服務網格將成為多雲領域中最主要的網絡管理底板。
服務網格與微服務框架
針對「服務網格」這個相對比較新的技術術語,很多人以為它就是一個新的微服務框架,譬如說以當前最為流行的社區開源服務網格Istio為例,它與已經存在的微服務框架如Dubbo、Spring Cloud等相比,服務網格其實是一種不同的架構體系。雖然兩者所解決的問題有些是類似的,譬如都會去解決服務架構中分布式特點帶來的複雜性問題,但是兩者解決這些問題的方式手段是不同的。
具體來說,當前服務網格技術包含了以三個特點:
服務治理能力Sidecar化通過Sidecar機制將服務治理功能標準化、統一化服務治理能力的可擴展性服務治理能力Sidecar化
在服務網格技術使用之前,把一個單體應用程式向分布式的微服務架構進行改造,通常來說,服務治理邏輯的實現往往是以代碼庫的方式構建在應用程式本身中,代碼庫中包括了服務發現、熔斷、限流等功能,在不同的應用程式中的代碼庫的版本也可能不同,不同的情況下也可能會帶來衝突問題。此外,代碼庫的版本一旦變更,即使應用邏輯並沒有任何變化,整個應用也要隨之全部變更。而通過把這些服務治理的能力Sidecar化,就能夠把服務治理的能力與應用程式本身進行解耦,可以較好地支持多種程式語言、並且不需要依賴於某種特定技術框架。一方面,針對Sidecar代理的生命周期管理和針對應用程式本身的生命周期管理可以獨立,提升了應用管理和運維管理的靈活性;另一方面,與傳統的SOA架構相比,這種去中心化的架構,有利於提升系統的可伸縮性。
通過Sidecar機制將服務治理功能標準化、統一化
隨著Sidecar代理功能的增強,原本在代碼庫中包含的功能逐漸地下沉到Sidecar代理中,這些功能包含了服務治理中需要的諸如流量管理、熔斷、重試、客戶端負載均衡的能力、安全以及可觀測性能力等。這些能力的標準化、統一化,可以解決複雜系統中微服務實現面臨的差異大、缺少共性的問題,可以很好地支持不同的程式語言實現應用服務的治理。
與此同時,容器編排技術的更加成熟,加速了Sidecar代理的普及與使用的便捷性。試想一下,如果每一個Sidecar代理都需要手工去維護注入、去管理它的生命周期,那它的價值與帶來的複雜性相比,就顯得比較單薄。Kubernetes是一個出色的容器部署和管理平臺,提供了一系列的API可以支持很自然的擴展,通過這些機制,Sidecar代理可以在應用程式的容器啟動時自動注入到對應的Pod中。
服務治理能力的可擴展性
儘管Sidecar代理已經把服務治理過程中常用的一些功能進行了封裝實現,但它的可擴展能力必須具備,譬如如何與已有的後端系統做對接,如何與日誌系統、監控系統、授權系統對接,如何解決用戶的一些特定需求。這個時候,一個Sidecar代理的可擴展性顯得尤為重要,而且在一定程度上會影響Sidecar代理的普及。
在Istio1.5之前的架構中,對Sidecar能力的擴展主要集中在Mixer組件上。注入了Sidecar代理的每個服務到服務的連接都需要經過Mixer,以進行指標metrics數據的上報和授權檢查,這樣一來會導致服務之間的調用延遲更長,伸縮性也變差。同時,Envoy要求使用代理程序的程式語言C++編寫,然後編譯為代理二進位文件。對於大多Istio用戶而言,這種擴展能力具有一定的挑戰性。
而在採用了新架構之後,Istio使用WebAssembly技術將其擴展模型與Envoy進行了合併。WebAssembly支持幾種不同語言的開發,然後將擴展編譯為可移植字節碼格式。這種擴展方式既簡化了向Istio添加自定義功能的過程,又通過將決策過程轉移到代理中而不是將其種植到Mixer上,減少了延遲。這裡面的一個典型例子就是原本在Mixer telemetry v1中的prometheus擴展插件,在Istio 1.5新的架構下,Istio標準指標由Envoy代理直接導出,遙測組件被實現為Proxy-wasm插件。
服務網格下的控制平面與數據平面
在雲原生模型中,一個應用程式可能會包含數若干個服務,每個服務又有數百個實例構成,那麼這些成百上千應用程式的Sidecar代理如何統一管理,這就是服務網格中定義的控制平面部分要解決的問題。作為代理,Envoy非常適合服務網格的場景,但要發揮Envoy的最大價值,就需要使它很好地與底層基礎設施或組件緊密配合。Envoy構成了服務網格的數據平面,Istio提供的支撐組件則是創建了控制平面。
這些Sidecar代理形成一個網狀的數據平面,通過該數據平面處理和觀測所有服務間的流量,數據平面扮演了一個用來建立、保護和控制通過網格流量的角色。控制平面就是負責數據平面如何執行的管理組件,是服務網格的大腦,並為服務網格使用人員提供公開API,以便較容易地操縱網絡行為。
如何簡化這些複雜的配置管理、支持不同類型的基礎設施?
服務網格技術的確帶來很多優勢,那麼它使用起來的情況如何呢?下圖中描述了Istio的架構和組件關係,無論是從控制平面還是數據平面來說,它的複雜配置是用戶經常遇到的一些挑戰。特別是在支持多集群、如何支持用戶自建的IDC內的集群、如何支持非容器化應用的統一管理,這些基本成為了用戶使用服務網格技術的阻礙。
為了解決這些問題,阿里雲服務網格產品ASM通過全部託管控制平面的組件,來降低用戶使用的複雜度,用戶只需要專注於業務應用的開發部署。在託管模式下,保持與Istio的兼容,支持聲明式API定義靈活的路由規則,支持多個Kubernetes集群的統一流量管理。在安全方面,可以靈活啟用或者禁用雙向TLS認證,整個網格內的安全配置可以動態生效;在多集群模式下,用戶也不需要去自行管理配置,這些事情都會交給託管平臺來管理。
服務網格ASM產品架構
作為業內首個全託管Istio兼容的服務網格產品ASM,一開始從架構上就保持了與社區、業界趨勢的一致性,控制平面的組件託管在阿里雲側,與數據面側的用戶集群獨立。ASM產品是基於社區開源的Istio定製實現的,在託管的控制面側,Istio的核心組件Pilot組件和安全citadel組件繼續保留使用,用於支撐精細化的流量管理和安全管理。Mixer組件由於前面提到的一些性能問題就沒有引入,而是採用了在數據面側直接對接的方式來支持這些能力,這也是跟新的Istio架構吻合的一點。通過託管模式,解耦了Istio組件與所管理的K8s集群的生命周期管理,使得架構更加靈活,提升了系統的可伸縮性。在深入分析服務網格方面,提供了網格診斷能力,把過去一年多來客戶遇到的問題以及如何解決這些問題的手段變成產品能力。
在擴展與集成方面,ASM產品整合阿里雲服務包括可觀測性服務、網絡互連CEN能力等,同時也優化整合了社區開源軟體包括OPA的支持、授權服務的定製化能力等。此外,隨著Isito1.5新架構的優化,將WebAssembly技術引入服務網格,集合WebAssembly技術的優勢,使得ASM架構成為:託管的高可用彈性控制平面 + 可擴展的插件式的數據平面。
在數據平面的支持上,ASM產品可以支持多種不同的計算基礎設施,這包括了阿里雲ACK 集群、後續跟進ASK集群、ECS虛擬機的支持,此外,ASM也很快就推出一個支持多雲混合雲的能力,能夠針對外部的K8s集群進行支持,不論這個集群是在用戶自建的IDC機房,還是在其他的公有雲之上,都可以通過ASM進行統一的服務治理。
更多關於服務網格Istio技術內容,推薦閱讀《Istio服務網格技術解析與實戰》。
作者簡介:
王夕寧 阿里雲高級技術專家,阿里雲服務網格產品ASM及Istio on Kubernetes技術負責人,專注於Kubernetes、雲原生、服務網格等領域。曾在IBM中國開發中心工作,擔任過專利技術評審委員會主席,作為架構師和主要開發人員負責或參與了一系列在SOA中間件、雲計算、IoT等領域的開發工作,擁有40多項相關領域的國際技術專利。