中國人民財產(chǎn)保險股份有限公司|孫杰平
在當(dāng)前可以預(yù)測的未來基礎(chǔ)設(shè)施演進(jìn)過程中,基于Service mesh模式在大中型系統(tǒng)組織模型中具備較大的優(yōu)勢。
隨著互聯(lián)網(wǎng)行業(yè)發(fā)展,微服務(wù)架構(gòu)逐漸被認(rèn)同為最先進(jìn)的技術(shù)架構(gòu)模式,各類信息系統(tǒng)無論是否適用,都急于啟用微服務(wù)架構(gòu)模式。但在微服務(wù)化改造與運(yùn)行過程中,會發(fā)現(xiàn)微服務(wù)的天生缺陷,以及目前各類微服務(wù)框架,如SpringCloud、Dubbo等,也僅作為過渡模型的事實(shí)。
對于現(xiàn)有廣泛使用的微服務(wù)模型,如SpringCloud、Dubbo等,較為突出的問題主要有以下幾方面:一是不適于高度組織化的容器集群,由于容器的部署銷毀是由外部K8S等框架實(shí)施的,微服務(wù)實(shí)體運(yùn)行于容器中同外部隔離,不知道自己的服務(wù)地址等環(huán)境信息,因此微服務(wù)的服務(wù)發(fā)現(xiàn)必須和K8S做適配才能真正可用,這樣就產(chǎn)生了極其不自然的功能重疊和繞道。二是現(xiàn)有微服務(wù)框架的跨語言能力極弱:對于現(xiàn)代互聯(lián)網(wǎng)組織來說,多語言化是無法避免的趨勢,在系統(tǒng)開發(fā)部署過程中,無論從外購系統(tǒng)、社區(qū)支持、人力招聘等方面考慮,都不得不接受多語言系統(tǒng)的存在。三是應(yīng)用間白盒及全相連,一個應(yīng)用需要知道并連接某服務(wù)提供方所有應(yīng)用的地址以及存活情況。
產(chǎn)生這些問題的原因主要是當(dāng)前微服務(wù)框架將系統(tǒng)組織、服務(wù)發(fā)現(xiàn)、路由等功能嵌入了應(yīng)用中,從而導(dǎo)致了系統(tǒng)組織等原本應(yīng)處于高視角的功能被拉低到了應(yīng)用這一層,同時也和應(yīng)用本身在技術(shù)上耦合過密。目前部分解決這一問題的辦法是使用API Gateway,但這僅是治標(biāo)的方案,無法根本解決微服務(wù)框架的問題,最終方案是通過Service Mesh來組織系統(tǒng)。
Service Mesh 的工作方式,簡單來說,就是將原本嵌入應(yīng)用的微服務(wù)Client獨(dú)立了出來,作為一個Proxy進(jìn)程獨(dú)立運(yùn)行于每一臺應(yīng)用主機(jī)上。應(yīng)用僅需簡單地配置一個本地Proxy地址進(jìn)行調(diào)用,由本機(jī)Proxy通過下發(fā)的服務(wù)路由表尋找一個服務(wù)提供方所在主機(jī)的Proxy,再發(fā)送給服務(wù)提供商。典型的工作方式如下圖:
Service Mesh的設(shè)計類似于現(xiàn)代路由器,將用戶、控制平面和數(shù)據(jù)平面徹底分離,并為控制平面增加了諸多管控和診斷能力,而數(shù)據(jù)平面的數(shù)據(jù)流向則是由控制平面下發(fā)的策略來決定的,這樣帶來的優(yōu)點(diǎn)主要有幾點(diǎn):
(1)應(yīng)用內(nèi)部不必再嵌入復(fù)雜的微服務(wù)Client:應(yīng)用不再涉及框架相關(guān)的服務(wù)發(fā)現(xiàn)等功能,每個接口僅需配置一個本地地址進(jìn)行調(diào)用,不必知道集群的情況。
(2)語言無關(guān):由于不需嵌入語言特定的Client,使用標(biāo)準(zhǔn)協(xié)議通信的雙方均可由任意語言編寫,即使是外采的二進(jìn)制系統(tǒng),也可以簡單的嵌入集群中。
(3)大量減少應(yīng)用間連接數(shù):同一主機(jī)的調(diào)用方所涉及的連接可以被Proxy連接復(fù)用,因此應(yīng)用間連接數(shù)可大幅減少。
(4)大量減少數(shù)據(jù)庫連接數(shù):原因同上,可以避免微服務(wù)帶來的數(shù)據(jù)庫連接數(shù)爆炸問題。
(5)提升通信加密的效率:可以將通信加密統(tǒng)一放置于由高運(yùn)行性能語言編寫的Proxy上,而非由運(yùn)行效率較低的應(yīng)用來進(jìn)行。
(6)調(diào)用過程的集中診斷:由于請求均通過Proxy進(jìn)行,可以便利的進(jìn)行統(tǒng)計并收集日志、報文等。
(7)運(yùn)維控制的統(tǒng)一認(rèn)證和調(diào)度:由于服務(wù)發(fā)現(xiàn)和調(diào)用路由放置在了獨(dú)立的系統(tǒng)中,運(yùn)維可以完全掌控調(diào)用的過程,包括設(shè)置調(diào)用的路徑,調(diào)用權(quán)限等。
(8)容器友好:Service Mesh框架同K8S等編排系統(tǒng)集成度較高,可無縫協(xié)同運(yùn)行。
(9)實(shí)施便利:在Mesh部署完成后,應(yīng)用僅需退回原始的直接調(diào)用模式即可使用Mesh帶來的收益。
因此在當(dāng)前可以預(yù)測的未來基礎(chǔ)設(shè)施演進(jìn)過程中,基于Service Mesh模式在大中型系統(tǒng)組織模型中具備較大的優(yōu)勢。
圖 Service Mesh 的工作方式