- Service Mesh實(shí)戰(zhàn):用Istio軟負(fù)載實(shí)現(xiàn)服務(wù)網(wǎng)格
- 周遙
- 359字
- 2019-07-29 18:22:37
1.5 服務(wù)網(wǎng)格(Serüice Mesh)新時(shí)期
1.5.1 多語(yǔ)言的困難
分布式關(guān)系日益復(fù)雜還不僅體現(xiàn)在調(diào)用關(guān)系上,隨著多語(yǔ)言、前后端分離等思想的發(fā)展,在架構(gòu)中呈現(xiàn)編程語(yǔ)言多元化的趨勢(shì),例如NodeJS、Golang(近期非常熱的配置中心etcd就是用其編寫(xiě)的)、Scala(大名鼎鼎的Kafka就是用其編寫(xiě)的)等。
本來(lái)僅維護(hù)調(diào)用關(guān)系就已經(jīng)讓工程師們焦頭爛額了,現(xiàn)在還需要對(duì)多語(yǔ)言進(jìn)行支持(熟練掌握一門(mén)語(yǔ)言及其生態(tài)還是需要一些時(shí)間的),并且不同的語(yǔ)言還有不同的編程風(fēng)格,所以多語(yǔ)言支持真的不容易。再者,由于多語(yǔ)言客戶需要侵入上層業(yè)務(wù)代碼,開(kāi)發(fā)人員就不得不在學(xué)習(xí)(至少了解)整個(gè)服務(wù)架構(gòu)后,才能較正確地做出是否能夠接入那些客戶端的判斷。
1.5.2 指數(shù)級(jí)增加的系統(tǒng)復(fù)雜度
業(yè)務(wù)需求不斷升級(jí)會(huì)導(dǎo)致系統(tǒng)復(fù)雜度呈指數(shù)級(jí)增長(zhǎng),工程師們經(jīng)常遇到這樣的現(xiàn)象:同一段時(shí)間內(nèi),一個(gè)產(chǎn)品可能有好幾個(gè)需求在并行開(kāi)發(fā),而開(kāi)發(fā)環(huán)境卻有限;某些應(yīng)用包含敏感數(shù)據(jù),并不希望將接口完全公開(kāi);隔三岔五的產(chǎn)品活動(dòng),對(duì)系統(tǒng)穩(wěn)定性有很高的要求,測(cè)試希望能將壓測(cè)常態(tài)化,最好還不影響線上應(yīng)用。整體系統(tǒng)復(fù)雜度并不像最初預(yù)估的那樣呈線性增長(zhǎng),其往往呈指數(shù)級(jí)增長(zhǎng)。這一點(diǎn),從圖1.9中每年雙十一的銷(xiāo)售額就可以看出來(lái)。
所以這時(shí)“多版本、多權(quán)限、動(dòng)態(tài)限流降級(jí)”等一系列針對(duì)鏈路的高級(jí)功能需求被陸續(xù)提了出來(lái)。為了滿足上述要求,工程師們不得不編寫(xiě)更多的系統(tǒng),有針對(duì)“分布式鎖”的,有針對(duì)“分布式鑒權(quán)”的,有針對(duì)“多版本”的,等等。這使得分布式系統(tǒng)本身愈加復(fù)雜與笨重。事實(shí)上,僅搭建與維護(hù)一套分布式架構(gòu)至少都需要一個(gè)專(zhuān)業(yè)的團(tuán)隊(duì)支持(通常這個(gè)團(tuán)隊(duì)叫“平臺(tái)架構(gòu)”或者“中間件”團(tuán)隊(duì)),每個(gè)產(chǎn)品至少需要半個(gè)專(zhuān)業(yè)的工程師來(lái)維護(hù),理解這些概念對(duì)于非專(zhuān)業(yè)的業(yè)務(wù)工程師來(lái)說(shuō)負(fù)擔(dān)可就更重了。

表1.9 “雙十一總銷(xiāo)售額與系統(tǒng)復(fù)雜度關(guān)系”
“微服務(wù)”雖然強(qiáng)調(diào)輕量化框架,但仍然無(wú)法避免系統(tǒng)愈加繁多的問(wèn)題,服務(wù)細(xì)化得越厲害,只能讓邏輯越輕量并解耦;但服務(wù)分得越細(xì),數(shù)量就越多,維護(hù)成本自然就越高,這并不能解決維護(hù)成本問(wèn)題。
1.5.3 Linkerd誕生
到了2015年,一家名為Buoyant的公司向外界公布了一種架構(gòu)空前的產(chǎn)品,其為每個(gè)服務(wù)分配了一個(gè)專(zhuān)用的稱(chēng)為“邊車(chē)網(wǎng)關(guān)(Sidecar)”的系統(tǒng),并將其與“服務(wù)發(fā)現(xiàn)”的公共服務(wù)相連,服務(wù)地址及控制信息便通過(guò)“服務(wù)治理系統(tǒng)”統(tǒng)一下發(fā),其系統(tǒng)概念如圖1.10所示:

圖1.10 “Linkerd系統(tǒng)基本架構(gòu)”
如此一來(lái),隨著接入應(yīng)用的添加,網(wǎng)關(guān)之間便形成了一個(gè)特殊的大網(wǎng)(如圖1.11所示),其承載著鏈路請(qǐng)求的路由、治理及其他任何與鏈路相關(guān)的工作。由于網(wǎng)關(guān)獨(dú)立于業(yè)務(wù)應(yīng)用而存在,因此其與業(yè)務(wù)邏輯是完全解耦的,并且開(kāi)發(fā)人員是無(wú)感知的。Linkerd巧妙地向上層應(yīng)用統(tǒng)一屏蔽了分布式架構(gòu),讓業(yè)務(wù)開(kāi)發(fā)變得更簡(jiǎn)單、純粹了。

圖1.11 “隨著應(yīng)用的添加,Linkerd網(wǎng)關(guān)之間形成的大網(wǎng)”
可是Linkerd在2015年推出后并沒(méi)有受到業(yè)界的關(guān)注,主要原因是Linkerd為每個(gè)服務(wù)部署一個(gè)網(wǎng)關(guān)的想法在傳統(tǒng)運(yùn)維體系中實(shí)在是太難實(shí)現(xiàn)了——部署、維護(hù)工作幾乎多了一倍。
1.5.4 第一代服務(wù)網(wǎng)格架構(gòu)
但是到了2017年,隨著“微服務(wù)”與“容器化”技術(shù)的迅速發(fā)展,以上問(wèn)題就非常簡(jiǎn)單了,只需要將網(wǎng)關(guān)程序打包到基礎(chǔ)鏡像(Image)即可解決。隨后Linkerd的想法迅速走紅,受到越來(lái)越多工程師的青睞。不久后William Morgan(Buoyant co-founder and CEO)在Linkerd官方博客上撰寫(xiě)了一篇名為What's a service mesh?And why do I need one的文章,將Linkerd的構(gòu)想定義為“服務(wù)網(wǎng)格(Service Mesh)”,并做了比較嚴(yán)謹(jǐn)?shù)亩x。
Service Mesh是一個(gè)“基礎(chǔ)設(shè)施”層,用于處理服務(wù)間通信。云原生應(yīng)用有著復(fù)雜的服務(wù)拓?fù)洌琒ervice Mesh保證請(qǐng)求可以在這些“拓?fù)洹敝小翱煽俊钡卮┧蟆T趯?shí)際應(yīng)用當(dāng)中,Service Mesh通常是由一系列輕量級(jí)的“網(wǎng)絡(luò)代理”組成的,它們與應(yīng)用程序部署在一起,但應(yīng)用程序“不需要知道”它們的存在。
這里有幾個(gè)關(guān)鍵點(diǎn),要強(qiáng)調(diào)一下。
○基礎(chǔ)設(shè)施:Service Mesh是未來(lái)云計(jì)算中不可或缺的基礎(chǔ)框架,就像TPC/IP協(xié)議棧一樣,雖然開(kāi)發(fā)人員不需要感知,但其中服務(wù)路由與治理的基礎(chǔ),為云計(jì)算提供服務(wù)通道與保障。
○拓?fù)?/span>:Service Mesh所提供的網(wǎng)關(guān)組成一個(gè)龐大的網(wǎng)格,由此網(wǎng)格統(tǒng)一為應(yīng)用提供服務(wù),其是對(duì)物理網(wǎng)的一層分布式抽象。
○可靠:由于其組成的網(wǎng)格為上層服務(wù)提供一層統(tǒng)一的代理,其作為基礎(chǔ)設(shè)施需要高度可靠,否則上層業(yè)務(wù)會(huì)非常頭痛。
○網(wǎng)絡(luò)代理:其是對(duì)所有服務(wù)設(shè)計(jì)的一層透明代理,可以跨言語(yǔ)。
○不需要知道:其是一層服務(wù)棧,擁有對(duì)上層支撐的全套功能且對(duì)業(yè)務(wù)無(wú)侵入,在層次上定義了其存在位置。
從上可以看出,第一代架構(gòu)是從數(shù)據(jù)邏輯層面上解決了微服務(wù)關(guān)系混亂的問(wèn)題,但它并沒(méi)有實(shí)現(xiàn)控制。Sidecar將各服務(wù)連接了起來(lái),并做到請(qǐng)求接管,但是沒(méi)有一個(gè)有效的系統(tǒng)或者設(shè)計(jì)來(lái)管理這些Sidecar的配置。
1.5.5 第二代服務(wù)網(wǎng)格架構(gòu)
這之后Linkerd被Google收編到了CNCF基金中,現(xiàn)在已經(jīng)作為一個(gè)開(kāi)源軟件在發(fā)展,但是由于其是使用Scala編寫(xiě)的,在性能上表現(xiàn)不佳(Scala需要JVM作為運(yùn)行環(huán)境,通常在啟動(dòng)的時(shí)候就至少占200MB內(nèi)存),再加上后來(lái)Google為了推進(jìn)Kubernetes在云上的發(fā)展,自己另起爐灶發(fā)布了Istio,使用的網(wǎng)關(guān)是Envoy, Linkerd可以說(shuō)前途昏暗。
也許是Buoyant自己也感覺(jué)到把Linkerd交給社區(qū)之后使其思考及發(fā)展都受到了嚴(yán)格的限制(在社區(qū)由于需要公共參與,每個(gè)決定都需要經(jīng)過(guò)較長(zhǎng)的時(shí)間),2017年又用Rust研發(fā)了Conduit。Conduit號(hào)稱(chēng)是一個(gè)非常輕量級(jí)的Service Mesh方案,不過(guò)由于Rust是一種非常小眾的語(yǔ)言,再加上這個(gè)時(shí)候Google的Istio勢(shì)如破竹般地發(fā)展,Conduit現(xiàn)在在業(yè)界的接受度也是非常低的,更不要談大規(guī)模實(shí)際生產(chǎn)了。
第二代服務(wù)網(wǎng)格典型的特點(diǎn)便是同時(shí)擁有了數(shù)據(jù)接管與集中控制能力,Google分別將兩個(gè)能力對(duì)應(yīng)的系統(tǒng)定義為“數(shù)據(jù)平面(Data Plane)”及“控制平面(Control Plane)”。
1.5.6 生產(chǎn)應(yīng)用情況
由于Istio是Google巨人主導(dǎo)的,很有說(shuō)服力,所以各大廠商愿意跟進(jìn)研究并投入試用,本書(shū)中所講解的Service Mesh大部分內(nèi)容也都基于Istio。其實(shí)除了國(guó)外研發(fā)的開(kāi)源產(chǎn)品,國(guó)內(nèi)很多團(tuán)隊(duì)也已經(jīng)在著手研究了,這些團(tuán)隊(duì)主要分為四類(lèi)體系。
○以螞蟻金服為首的開(kāi)源系:螞蟻金服自研的SOFA(Scalable Open Financial Architecture)Mesh在開(kāi)始的時(shí)候走的就是開(kāi)源路線,他們參考了Istio及Envoy的設(shè)計(jì)思想,重新實(shí)現(xiàn)了自己的Service Mesh系統(tǒng),旁路網(wǎng)關(guān)(Sidecar)基于Go語(yǔ)言,該系統(tǒng)的前身是已經(jīng)開(kāi)源的SOFA RPC框架。螞蟻金服于2018年7月正式將其開(kāi)源,正式的可以用于生產(chǎn)的框架可能還需要一些時(shí)間。
○以華為為代表的自研系:華為可能在Service Mesh概念出來(lái)前就已經(jīng)有類(lèi)似的想法了,只是沒(méi)有抽取出一個(gè)公共的概念。無(wú)論是華為早期的HSA還是之后出現(xiàn)的CSE Mesher,都是對(duì)Service Mesh的探索。CSE Mesher的整個(gè)架構(gòu)都是基于華為自身微服務(wù)架構(gòu)經(jīng)驗(yàn)研發(fā)的,其Sidecar也是用Go語(yǔ)言編寫(xiě)的。如其官方文檔所述,其資源占用非常小,常規(guī)狀態(tài)下僅為30MB。
○以騰訊為代表的拿來(lái)主義系:騰訊的Tencent Service Mesh對(duì)開(kāi)源的產(chǎn)品(如Istio)進(jìn)行定制,強(qiáng)化吸收后再加入自身特殊的業(yè)務(wù)邏輯。騰訊選擇的Sidecar是Envoy,使用C++編寫(xiě),比較符合騰訊的技術(shù)棧。其公開(kāi)的技術(shù)并不多,仍然以內(nèi)部小范圍使用為主。
○以UCloud為代表的適配系:主要也是依賴開(kāi)源方案,但不是完全將其產(chǎn)品引入,只是對(duì)其中幾個(gè)關(guān)鍵部分添加適配器,以適應(yīng)企業(yè)現(xiàn)有產(chǎn)品,以最小的變更成本引入Service Mesh體系。
能夠看出,服務(wù)網(wǎng)格概念雖然火,但并不是像Spring Cloud及Dubbo那樣經(jīng)過(guò)實(shí)戰(zhàn)考驗(yàn)的、成熟的框架——企業(yè)要想擁抱服務(wù)網(wǎng)格,通常情況下只能自行研發(fā)或改造。雖然Google已經(jīng)在試圖通過(guò)Istio來(lái)為業(yè)界設(shè)立一個(gè)通用標(biāo)準(zhǔn),但從現(xiàn)狀來(lái)看,還有比較長(zhǎng)遠(yuǎn)的路要走。
可以說(shuō)現(xiàn)在Istio已經(jīng)獨(dú)領(lǐng)風(fēng)騷,在服務(wù)網(wǎng)格這個(gè)領(lǐng)域確立了堅(jiān)實(shí)的根基,特別是其在2018年8月發(fā)布1.0正式版本之后,基本上就已成為唯一一個(gè)可以實(shí)際用于生產(chǎn)環(huán)境的開(kāi)源框架。
服務(wù)網(wǎng)格是一個(gè)全新的概念,各大公司在爭(zhēng)相研究與實(shí)踐,我相信服務(wù)網(wǎng)格將來(lái)必然是云服務(wù)的重要根基之一。
- Photoshop CC 2017實(shí)戰(zhàn)基礎(chǔ)培訓(xùn)教程(全視頻微課版)
- Zenoss Core Network and System Monitoring
- CorelDRAW服裝設(shè)計(jì)實(shí)用教程(第四版)
- 我為PS狂 Photoshop照片處理一分鐘秘笈
- Blender 3D Architecture, Buildings, and Scenery
- 大規(guī)模組織DevOps實(shí)踐
- NHibernate 2 Beginner's Guide
- AutoCAD 2016中文版完全自學(xué)手冊(cè)
- 深入理解OpenCV:實(shí)用計(jì)算機(jī)視覺(jué)項(xiàng)目解析(原書(shū)第3版)
- 數(shù)碼攝影后期密碼Photoshop CC調(diào)色秘籍(第2版)
- ChatGPT+AI文案寫(xiě)作實(shí)戰(zhàn)108招
- Moodle 2.0 for Business Beginner's Guide
- Building Websites with Mambo
- AutoCAD 2019中文版完全自學(xué)手冊(cè)(標(biāo)準(zhǔn)版)
- AutoCAD 2010 建筑設(shè)計(jì)與制作技能基礎(chǔ)教程