3.Service Mesh
隨著服務(wù)框架內(nèi)功能的日益增多,跨語言的基礎(chǔ)功能復用變得十分困難,這也就意味著微服務(wù)的開發(fā)者被綁定在某種特定語言上,從而違背了微服務(wù)的敏捷迭代原則。2016年出現(xiàn)了新的微服務(wù)架構(gòu)——Service Mesh(服務(wù)網(wǎng)格),原來被模塊化到服務(wù)框架里的微服務(wù)基礎(chǔ)能力,被進一步從一個SDK演進成為一個獨立進程——Sidecar。這個變化使得多語言支持問題得以徹底解決,微服務(wù)基礎(chǔ)能力演進和業(yè)務(wù)邏輯迭代徹底解耦。這種架構(gòu)就是云原生時代的微服務(wù)架構(gòu)——Cloud Native Microservices,Sidecar進程開始接管微服務(wù)應(yīng)用之間的流量,承載了服務(wù)框架的功能,包括服務(wù)發(fā)現(xiàn)、調(diào)用容錯以及豐富的服務(wù)治理功能,例如權(quán)重路由、灰度路由、流量重放、服務(wù)偽裝等。
Service Mesh是分布式應(yīng)用在微服務(wù)架構(gòu)紙上發(fā)展起來的新技術(shù),旨在將微服務(wù)之間的連接、安全、流量控制和可觀測等通用功能下陳偉平臺基礎(chǔ)設(shè)施,實現(xiàn)應(yīng)用與平臺基礎(chǔ)設(shè)施的解耦。這個解耦意味著開發(fā)者無須關(guān)注微服務(wù)相關(guān)治理問題,而是聚焦于業(yè)務(wù)邏輯本身,提高了應(yīng)用開發(fā)效率,加速了業(yè)務(wù)探索和創(chuàng)新。換句話說,因為大量非功能性的代碼實現(xiàn)從業(yè)務(wù)進程剝離到另外的進程中,Service Mesh以無侵入的方式實現(xiàn)了應(yīng)用輕量化。Service Mesh的典型架構(gòu)如下圖所示。

在上圖中,Service A調(diào)用Service B的所有請求都被其下的Proxy(在Envoy中是Sidecar)截獲,代理ServiceA完成到ServiceB的服務(wù)發(fā)現(xiàn)、熔斷、限流等策略,而這些策略的總控是在控制平面上配置的。
從架構(gòu)上看,Istio可以運行在虛擬機或容器中,Istio的主要組件包括Pilot(服務(wù)發(fā)現(xiàn)、流量管理)、Galley(注冊管理)、Mixer(訪問控制、可觀測性)、Gitadel(終端用戶認證、流量加密)。整個服務(wù)網(wǎng)格關(guān)注鏈接和流量控制、可觀測性、安全和可運維性。相比較來說,雖然服務(wù)網(wǎng)格增加了4個IPC通信的成本,但隨著軟硬件能力的提升,并不會給整體調(diào)用的延遲帶來顯著的影響,特別是對于百毫秒級別的業(yè)務(wù)調(diào)用而言,可以控制在2%以內(nèi)。此外,服務(wù)化的應(yīng)用并沒有做任何改造,就獲得了強大的流量控制、服務(wù)治理、可觀測性、“4個9”以上的高可用性、容災(zāi)和安全等能力,再加上業(yè)務(wù)的橫向擴展能力,整體收益仍然是遠大于額外IPC通信支出的。
在服務(wù)網(wǎng)格的技術(shù)發(fā)展上,數(shù)據(jù)平面與控制平面之間的協(xié)議標準化是必然趨勢。大體上,Service Mesh的技術(shù)發(fā)展圍繞著“事實標準”來展開——共建各云廠商共同采納的開源軟件。
Conduit作為K8s的超輕量級Service Mesh,其目標是成為最快、最輕、最簡單最安全的Service Mesh。它使用Rust構(gòu)架了快速、安全的數(shù)據(jù)平面,用Go開發(fā)了簡單。強大的控制平面,總體設(shè)計圍繞著性能、安全性和可用性進行。它能透明地管理服務(wù)之間的通信,提供可觀測性,可靠性、安全性和彈性的支持。數(shù)據(jù)平面時應(yīng)用代碼之外運行的輕量級代理,控制平面是一個高可用的控制器,Conduit的設(shè)計更傾向于K8s中的低資源部署。