網(wǎng)易云原生架構(gòu)轉(zhuǎn)型之路

什么是 Service Mesh?一言以蔽之:Service Mesh 是微服務(wù)時(shí)代的 TCP/IP 協(xié)議。

然而現(xiàn)實(shí)遠(yuǎn)比想象的復(fù)雜,在實(shí)際情況中,通信需要底層能夠傳輸字節(jié)碼和電子信號的物理層來完成,在TCP協(xié)議出現(xiàn)之前,服務(wù)需要自己處理網(wǎng)絡(luò)通信所面臨的丟包、亂序、重試等一系列流控問題,因此服務(wù)實(shí)現(xiàn)中,除了業(yè)務(wù)邏輯外,還夾雜著對網(wǎng)絡(luò)傳輸問題的處理邏輯。

為了避免每個(gè)服務(wù)都需要自己實(shí)現(xiàn)一套相似的網(wǎng)絡(luò)傳輸處理邏輯,TCP協(xié)議出現(xiàn)了,它解決了網(wǎng)絡(luò)傳輸中通用的流量控制問題,將技術(shù)棧下移,從服務(wù)的實(shí)現(xiàn)中抽離出來,成為操作系統(tǒng)網(wǎng)絡(luò)層的一部分。

在TCP出現(xiàn)之后,機(jī)器之間的網(wǎng)絡(luò)通信不再是一個(gè)難題,以GFS /BigTable /MapReduce為代表的分布式系統(tǒng)得以蓬勃發(fā)展。這時(shí),分布式系統(tǒng)特有的通信語義又出現(xiàn)了,如熔斷策略、負(fù)載均衡、服務(wù)發(fā)現(xiàn)、認(rèn)證和授權(quán)、quota限制、trace和監(jiān)控等等,于是服務(wù)根據(jù)業(yè)務(wù)需求來實(shí)現(xiàn)一部分所需的通信語義。

為了避免每個(gè)服務(wù)都需要自己實(shí)現(xiàn)一套分布式系統(tǒng)通信的語義功能,隨著技術(shù)的發(fā)展,一些面向微服務(wù)架構(gòu)的開發(fā)框架出現(xiàn)了,如Twitter的Finagle、Facebook的Proxygen以及Spring Cloud等等,這些框架實(shí)現(xiàn)了分布式系統(tǒng)通信需要的各種通用語義功能:如負(fù)載均衡和服務(wù)發(fā)現(xiàn)等,因此一定程度上屏蔽了這些通信細(xì)節(jié),使得開發(fā)人員使用較少的框架代碼就能開發(fā)出健壯的分布式系統(tǒng)。

第二代微服務(wù)模式看似完美,但開發(fā)人員很快又發(fā)現(xiàn),它也存在一些本質(zhì)問題:
其一,雖然框架本身屏蔽了分布式系統(tǒng)通信的一些通用功能實(shí)現(xiàn)細(xì)節(jié),但開發(fā)者卻要花更多精力去掌握和管理復(fù)雜的框架本身,在實(shí)際應(yīng)用中,去追蹤和解決框架出現(xiàn)的問題也絕非易事; 其二,開發(fā)框架通常只支持一種或幾種特定的語言,回過頭來看文章最開始對微服務(wù)的定義,一個(gè)重要的特性就是語言無關(guān),但那些沒有框架支持的語言編寫的服務(wù),很難融入面向微服務(wù)的架構(gòu)體系,想因地制宜的用多種語言實(shí)現(xiàn)架構(gòu)體系中的不同模塊也很難做到; 其三,框架以lib庫的形式和服務(wù)聯(lián)編,復(fù)雜項(xiàng)目依賴時(shí)的庫版本兼容問題非常棘手,同時(shí),框架庫的升級也無法對服務(wù)透明,服務(wù)會(huì)因?yàn)楹蜆I(yè)務(wù)無關(guān)的lib庫升級而被迫升級;
因此以Linkerd,Envoy,NginxMesh為代表的代理模式(邊車模式)應(yīng)運(yùn)而生,這就是第一代Service Mesh,它將分布式服務(wù)的通信抽象為單獨(dú)一層,在這一層中實(shí)現(xiàn)負(fù)載均衡、服務(wù)發(fā)現(xiàn)、認(rèn)證授權(quán)、監(jiān)控追蹤、流量控制等分布式系統(tǒng)所需要的功能,作為一個(gè)和服務(wù)對等的代理服務(wù),和服務(wù)部署在一起,接管服務(wù)的流量,通過代理之間的通信間接完成服務(wù)之間的通信請求,這樣上邊所說的三個(gè)問題也迎刃而解。

如果我們從一個(gè)全局視角來看,就會(huì)得到如下部署圖:

如果我們暫時(shí)略去服務(wù),只看Service Mesh的單機(jī)組件組成的網(wǎng)絡(luò):

相信現(xiàn)在,大家已經(jīng)理解何所謂Service Mesh,也就是服務(wù)網(wǎng)格了。它看起來確實(shí)就像是一個(gè)由若干服務(wù)代理所組成的錯(cuò)綜復(fù)雜的網(wǎng)格。
第一代Service Mesh由一系列獨(dú)立運(yùn)行的單機(jī)代理服務(wù)構(gòu)成,為了提供統(tǒng)一的上層運(yùn)維入口,演化出了集中式的控制面板,所有的單機(jī)代理組件通過和控制面板交互進(jìn)行網(wǎng)絡(luò)拓?fù)洳呗缘母潞蛦螜C(jī)數(shù)據(jù)的匯報(bào)。這就是以Istio為代表的第二代Service Mesh。

只看單機(jī)代理組件(數(shù)據(jù)面板)和控制面板的Service Mesh全局部署視圖如下:

至此,見證了6個(gè)時(shí)代的變遷,大家一定清楚了Service Mesh技術(shù)到底是什么,以及是如何一步步演化到今天這樣一個(gè)形態(tài)。
Service Mesh在各個(gè)企業(yè)應(yīng)用廣泛,以下分享網(wǎng)易云原生架構(gòu)轉(zhuǎn)型之路。
下載鏈接:網(wǎng)易云原生架構(gòu)轉(zhuǎn)型之路



























推薦閱讀:
世界的真實(shí)格局分析,地球人類社會(huì)底層運(yùn)行原理
不是你需要中臺,而是一名合格的架構(gòu)師(附各大廠中臺建設(shè)PPT)
企業(yè)IT技術(shù)架構(gòu)規(guī)劃方案
論數(shù)字化轉(zhuǎn)型——轉(zhuǎn)什么,如何轉(zhuǎn)?
企業(yè)10大管理流程圖,數(shù)字化轉(zhuǎn)型從業(yè)者必備!
【中臺實(shí)踐】華為大數(shù)據(jù)中臺架構(gòu)分享.pdf
華為如何實(shí)施數(shù)字化轉(zhuǎn)型(附PPT)
