Service Mesh是什么,為我們解決了什么問(wèn)題?
作者:xcbeyond
瘋狂源自夢(mèng)想,技術(shù)成就輝煌!微信公眾號(hào):《程序猿技術(shù)大咖》號(hào)主,專注后端開(kāi)發(fā)多年,擁有豐富的研發(fā)經(jīng)驗(yàn),樂(lè)于技術(shù)輸出、分享,現(xiàn)階段從事微服務(wù)架構(gòu)項(xiàng)目的研發(fā)工作,涉及架構(gòu)設(shè)計(jì)、技術(shù)選型、業(yè)務(wù)研發(fā)等工作。對(duì)于Java、微服務(wù)、數(shù)據(jù)庫(kù)、Docker有深入了解,并有大量的調(diào)優(yōu)經(jīng)驗(yàn)。
1、Service Mesh介紹
Service Mesh翻譯為“服務(wù)網(wǎng)格”,作為服務(wù)間通信的基礎(chǔ)設(shè)施層。輕量級(jí)高性能網(wǎng)絡(luò)代理,提供安全的、快速的、可靠地服務(wù)間通訊,與實(shí)際應(yīng)用部署一起,但對(duì)應(yīng)用透明。應(yīng)用作為服務(wù)的發(fā)起方,只需要用最簡(jiǎn)單的方式將請(qǐng)求發(fā)送給本地的服務(wù)網(wǎng)格代理,然后網(wǎng)格代理會(huì)進(jìn)行后續(xù)的操作,如服務(wù)發(fā)現(xiàn),負(fù)載均衡,最后將請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo)服務(wù)。
Service Mesh目的是解決系統(tǒng)架構(gòu)微服務(wù)化后的服務(wù)間通信和治理問(wèn)題。 服務(wù)網(wǎng)格由Sidecar節(jié)點(diǎn)組成,這個(gè)模式的精髓在于實(shí)現(xiàn)了數(shù)據(jù)面(業(yè)務(wù)邏輯)和控制面的解耦。具體到微服務(wù)架構(gòu)中,即給每一個(gè)微服務(wù)實(shí)例同步部署一個(gè)Sidecar。
在Service Mesh部署網(wǎng)絡(luò)結(jié)構(gòu)圖中,綠色方塊為應(yīng)用服務(wù),藍(lán)色方塊為 SideCar,應(yīng)用服務(wù)之間通過(guò)Sidecar進(jìn)行通信,整個(gè)服務(wù)通信形成圖中的藍(lán)色網(wǎng)絡(luò)連線,圖中所有藍(lán)色部分就形成了Service Mesh。其具備如下主要特點(diǎn):
應(yīng)用程序間通訊的中間層
輕量級(jí)網(wǎng)絡(luò)代理
應(yīng)用程序無(wú)感知
解耦應(yīng)用程序的重試/超時(shí)、監(jiān)控、追蹤和服務(wù)發(fā)現(xiàn)
2、Service Mesh解決的問(wèn)題
從上述Service Mesh的定義看:
基礎(chǔ)設(shè)施層是Service Mesh的定位,致力于解決微服務(wù)基礎(chǔ)設(shè)施標(biāo)準(zhǔn)化、配置化、服務(wù)化和產(chǎn)品化的問(wèn)題。
服務(wù)間通信是Service Mesh技術(shù)層面對(duì)的問(wèn)題,對(duì)微服務(wù)屏蔽通信的復(fù)雜度,解決微服務(wù)的通信治理問(wèn)題。
請(qǐng)求的可靠傳遞是Service Mesh的目標(biāo)。
輕量級(jí)網(wǎng)絡(luò)代理是Service Mesh的部署方式。
對(duì)應(yīng)用程序透明是Service Mesh的亮點(diǎn)和特色,實(shí)現(xiàn)對(duì)業(yè)務(wù)無(wú)侵入。
綜合上述,Service Mesh主要解決用戶如下3個(gè)維度的痛點(diǎn)需求:
完善的微服務(wù)基礎(chǔ)設(shè)施
通過(guò)將微服務(wù)通信下沉到基礎(chǔ)設(shè)施層,屏蔽了微服務(wù)處理各種通信問(wèn)題的復(fù)雜度,形成微服務(wù)之間的抽象協(xié)議層。開(kāi)發(fā)者無(wú)需關(guān)心通信層的具體實(shí)現(xiàn),也無(wú)需關(guān)注RPC通信(包含服務(wù)發(fā)現(xiàn)、負(fù)載均衡、流量調(diào)度、流量降級(jí)、監(jiān)控統(tǒng)計(jì)等)的一切細(xì)節(jié),真正像本地調(diào)用一樣使用微服務(wù),通信相關(guān)的一起工作直接交給Service Mesh。
語(yǔ)言無(wú)關(guān)的通信和鏈路治理
功能上,Service Mesh并沒(méi)有提供任何新的特性和能力,Service Mesh提供的所有通信和服務(wù)治理能力在Service Mesh之前的技術(shù)中均能找到,比如Spring Cloud就實(shí)現(xiàn)了完善的微服務(wù)RPC通信和服務(wù)治理支持。
Service Mesh改變的是通信和服務(wù)治理能力提供的方式,通過(guò)將這些能力實(shí)現(xiàn)從各語(yǔ)言業(yè)務(wù)實(shí)現(xiàn)中解耦,下沉到基礎(chǔ)設(shè)施層面,以一種更加通用和標(biāo)準(zhǔn)化的方式提供,屏蔽不同語(yǔ)言、不同平臺(tái)的差異性,有利于通信和服務(wù)治理能力的迭代和創(chuàng)新,使得業(yè)務(wù)實(shí)現(xiàn)更加方便。
Service Mesh避免了多語(yǔ)言服務(wù)治理上的重復(fù)建設(shè),通過(guò)Service Mesh語(yǔ)言無(wú)關(guān)的通信和服務(wù)治理能力,助力于多語(yǔ)言技術(shù)棧的效率提升。
通信和服務(wù)治理的標(biāo)準(zhǔn)化
微服務(wù)治理層面,Service Mesh是標(biāo)準(zhǔn)化、體系化、無(wú)侵入的分布式治理平臺(tái)。
標(biāo)準(zhǔn)化方面,Sidecar成為所有微服務(wù)流量通信的約束標(biāo)準(zhǔn),同時(shí)Service Mesh的數(shù)據(jù)平臺(tái)和控制平面也通過(guò)標(biāo)準(zhǔn)協(xié)議進(jìn)行交互。
體系化方面,從全局考慮,提供多維度立體的微服務(wù)可觀測(cè)能力(Metric、Trace、Logging),并提供體系化的服務(wù)治理能力,如限流、熔斷、安全、灰度等。
通過(guò)標(biāo)準(zhǔn)化,帶來(lái)一致的服務(wù)治理體驗(yàn),減少多業(yè)務(wù)之間由于服務(wù)治理標(biāo)準(zhǔn)不一致帶來(lái)的溝通和轉(zhuǎn)換成本,提升全局服務(wù)治理的效率。
3、Service Mesh的原理
Service Mesh的核心是數(shù)據(jù)平面Sidecar與控制平面Control Plane,如下圖:
數(shù)據(jù)平面: Sidecar,與服務(wù)部署在一起的輕量級(jí)網(wǎng)絡(luò)代理,用于實(shí)現(xiàn)服務(wù)框架的各項(xiàng)功能(如,服務(wù)發(fā)現(xiàn)、負(fù)載均衡、限流熔斷等),讓服務(wù)回歸業(yè)務(wù)本質(zhì)。
數(shù)據(jù)平臺(tái)可以認(rèn)為是將Spring Cloud、Dubbo等相關(guān)的微服務(wù)框架中通信和服務(wù)治理能力獨(dú)立出來(lái)的一個(gè)語(yǔ)言無(wú)法的進(jìn)程,并且更注重通用性和擴(kuò)展性。在Service Mesh中,不再將數(shù)據(jù)平面代理視為一個(gè)個(gè)獨(dú)立的組件,而是將這些代理連接在一起形成一個(gè)全局的分布式網(wǎng)格。
在傳統(tǒng)的微服務(wù)架構(gòu)中,各種服務(wù)框架的功能(如,服務(wù)發(fā)現(xiàn)、負(fù)載均衡、限流熔斷等)代碼邏輯或多或少的都需要耦合到服務(wù)實(shí)例的代碼中,給服務(wù)實(shí)例增加了很多無(wú)關(guān)業(yè)務(wù)的代碼,同時(shí)帶來(lái)了一定的復(fù)雜度。
有了SideCar之后,服務(wù)節(jié)點(diǎn)只做業(yè)務(wù)邏輯自身的功能,服務(wù)之間的調(diào)用只需交給SideCar,由SideCar完成注冊(cè)服務(wù)、服務(wù)發(fā)現(xiàn)、請(qǐng)求路由、熔斷限流、日志統(tǒng)計(jì)等業(yè)務(wù)無(wú)關(guān)功能。
在這種新的微服務(wù)架構(gòu)中,所有的SideCar組成在一起,就形成了服務(wù)網(wǎng)格。那么這個(gè)大型的服務(wù)網(wǎng)格并不是完全自治的,它還需要一個(gè)統(tǒng)一的控制節(jié)點(diǎn)Control Plane。
控制平面: 是用來(lái)從全局的角度上控制SideCar,相當(dāng)于Service Mesh架構(gòu)的大腦,控制著 SideCar來(lái)實(shí)現(xiàn)服務(wù)治理的各項(xiàng)功能。比如,它負(fù)責(zé)所有SideCar的注冊(cè),存儲(chǔ)統(tǒng)一的路由表,幫助各個(gè) SideCar進(jìn)行負(fù)載均衡和請(qǐng)求調(diào)度;它收集所有 SideCar的監(jiān)控信息和日志數(shù)據(jù)。