本文整理自5miles CTO呂藝在WOT 2023大會(huì)上的主題分享,更多精彩內(nèi)容及現(xiàn)場(chǎng)PPT,請(qǐng)關(guān)注51CTO技術(shù)棧公眾號(hào),發(fā)消息【W(wǎng)OT2023PPT】即可直接領(lǐng)取。
日前,在51CTO主辦的WOT全球技術(shù)創(chuàng)新大會(huì)——云時(shí)代技術(shù)專場(chǎng)上,5miles CTO呂藝帶來(lái)主題演講:《混合容器在微服務(wù)架構(gòu)中的實(shí)踐》,為大眾呈現(xiàn)出全新的視角。
混合容器為微服務(wù)帶來(lái)更多選擇,可以根據(jù)實(shí)際需要進(jìn)行優(yōu)化,構(gòu)建出靈活高效的云原生應(yīng)用。在微服務(wù)架構(gòu)中,可以通過(guò)按需選擇、流量分離、漸進(jìn)遷移、混合調(diào)度、統(tǒng)一管理等方式使用混合容器。
文章摘選自呂藝WOT期間演講的精彩內(nèi)容,詳細(xì)講述了混合容器在微服務(wù)架構(gòu)中的實(shí)踐。
1、微服務(wù)架構(gòu)及應(yīng)用場(chǎng)景
微服務(wù)架構(gòu)(Microservice Architecture)是一種將單體應(yīng)用拆分成多個(gè)小型服務(wù)的架構(gòu)風(fēng)格,實(shí)現(xiàn)松耦合、高內(nèi)聚的服務(wù)部署,在云原生應(yīng)用快速迭代方面有顯著優(yōu)勢(shì),但也需要注意引入的復(fù)雜性。每個(gè)微服務(wù)負(fù)責(zé)實(shí)現(xiàn)單一功能,多個(gè)微服務(wù)組合起來(lái)就能實(shí)現(xiàn)完整的業(yè)務(wù)。
一開(kāi)始,呂藝的5miles電商創(chuàng)業(yè)團(tuán)隊(duì)需要從小規(guī)模做起,不需要將系統(tǒng)構(gòu)建成標(biāo)準(zhǔn)的微服務(wù),只需要系統(tǒng)能夠承載業(yè)務(wù)即可。
但隨著業(yè)務(wù)規(guī)模的變大,系統(tǒng)需要面臨諸多考驗(yàn)。用戶從幾萬(wàn)增加到幾十萬(wàn),任何小規(guī)模系統(tǒng)都會(huì)面臨極大的壓力。
此時(shí),需要將面臨壓力較大的模塊抽離,壓力較小的模塊繼續(xù)按照原來(lái)的方式運(yùn)行,確保發(fā)展有序,減少一個(gè)問(wèn)題搞跨整個(gè)系統(tǒng)的可能性,微服務(wù)逐漸派上了用場(chǎng)。
標(biāo)準(zhǔn)微服務(wù)示意圖
上圖展示出標(biāo)準(zhǔn)的微服務(wù)架構(gòu),“實(shí)踐中,我們會(huì)針對(duì)不同業(yè)務(wù)選取不同的開(kāi)發(fā)語(yǔ)言,將業(yè)務(wù)拆離,不‘跑’在同一服務(wù)之中,”呂藝說(shuō)。
當(dāng)流量從getway進(jìn)來(lái)后,會(huì)被分發(fā)到不同的服務(wù)之中。這些服務(wù)有用Python寫(xiě)的,也有用go寫(xiě)的,有些則是用Java寫(xiě)的。
在微服務(wù)架構(gòu)中,不同服務(wù)之間是獨(dú)立存在的。每個(gè)服務(wù)擁有獨(dú)立的存儲(chǔ)和緩存,服務(wù)間既可以通過(guò)RPC調(diào)用,也可以通過(guò)隊(duì)列調(diào)用進(jìn)行解耦合。
圖片
上圖是AWS部署服務(wù)示意圖,幾年前,該部署模式曾具體負(fù)責(zé)出海業(yè)務(wù),旨在將中國(guó)的研發(fā)能力推廣至美國(guó)。
“回顧過(guò)去十年的演進(jìn)過(guò)程,剛開(kāi)始,我們只用虛擬機(jī),并沒(méi)有用到容器;后來(lái),才開(kāi)始使用云技術(shù)和ECS,一段時(shí)間后把ECS換成了EKS,旨在與業(yè)界同行處于同一調(diào)度技術(shù)體系,很多經(jīng)驗(yàn)就互通了,實(shí)現(xiàn)降本增效的目的。另外,當(dāng)流量激增時(shí)也更容易實(shí)現(xiàn)自動(dòng)擴(kuò)縮容,”呂藝回憶說(shuō)。
2、為什么使用混合容器?
為什么我們要考慮混合容器呢?
上文提及的微服務(wù)在容器之中運(yùn)行后,雖然Docker比之前的虛擬機(jī)輕很多、占用資源也比較少,但是,它需要耗費(fèi)CPU和存儲(chǔ)資源運(yùn)行容器的基礎(chǔ)設(shè)施。
混合容器能夠充分利用不同容器的技術(shù)優(yōu)勢(shì),如,Docker的成熟生態(tài),Wasm的輕量和快速啟動(dòng)都提升了整體資源的利用率。
3、WebAssembly:打造容器新時(shí)代
在大型系統(tǒng)里,單一容器安全性和某些可疑代碼的執(zhí)行存在問(wèn)題,此時(shí)就需要WebAssembly的支持。
該技術(shù)最早出現(xiàn)在瀏覽器端,Chrome、Firefox、Safari和Edge等主流瀏覽器現(xiàn)在都在支持WebAssembly。它正在成為Web開(kāi)發(fā)的主流組件,特別對(duì)于游戲、CAD、VR/AR、圖像/視頻編輯、密碼學(xué)和機(jī)器學(xué)習(xí)等。
圖片
2019年,Docker聯(lián)合創(chuàng)始人Solomon Hykes在推特上說(shuō):“如果當(dāng)時(shí)有WASM和WASI技術(shù),就不用再發(fā)明Docker了?!币?yàn)椋l(fā)明Docker的初衷就是為了更好提供隔離計(jì)算能力。但是,WebAssembly更符合對(duì)未來(lái)的期望。
2022年,云原生計(jì)算基金會(huì)提出,容器技術(shù)將成為新常態(tài),而WebAssembly是全新容器技術(shù)的代表。
圖片
從統(tǒng)計(jì)學(xué)數(shù)據(jù)看,37%的用戶已在無(wú)形之中用過(guò)WebAssembly;如上圖,針對(duì)WebAssembly runtime技術(shù)應(yīng)用,排名第一的是WasmEdge,第二則是Wasm。實(shí)踐中,更多會(huì)用到WasmEdge。
WebAssembly鏡像的體積很小,大概是Linux鏡像的1/100。它可以為每個(gè)Wasm實(shí)例提供獨(dú)立的運(yùn)行環(huán)境、隔離性好、占用內(nèi)存小。與Docker等傳統(tǒng)容器不同,Wasm容器不需要操作系統(tǒng)級(jí)虛擬化,啟動(dòng)時(shí)間可以在毫秒級(jí)。
Wasm的運(yùn)行性能比較好,損耗也是較小,特別適用于高性能計(jì)算。它默認(rèn)有沙箱機(jī)制,安全能力比Docker粒度更細(xì),更容易控制。
Wasm主要的應(yīng)用場(chǎng)景包括:在瀏覽器中運(yùn)行沙箱代碼、serverless計(jì)算、邊緣計(jì)算、承載AI推理計(jì)算等。相比虛擬機(jī),Wasm容器更輕量和高效。
此外,它的代碼隔離性比較好,各種語(yǔ)言都可以編譯成WebAssembly,這對(duì)開(kāi)發(fā)者特別友好。
未來(lái),Wasm容器有望成為云原生應(yīng)用和微服務(wù)的重要運(yùn)行環(huán)境,可以跨平臺(tái)、快速部署和啟動(dòng)微服務(wù)、函數(shù)即服務(wù)等。
4、Wasm容器 VS Linux容器
二者在隔離級(jí)別、啟動(dòng)時(shí)間、編程語(yǔ)言和應(yīng)用場(chǎng)景方面各有不同。Wasm容器適合服務(wù)器less和邊緣計(jì)算,Linux容器更適合規(guī)?;渴稹?/p>
5、WasmEdge:打破傳統(tǒng)、應(yīng)用更友好
WasmEdge是由CNCF云原生計(jì)算基金會(huì)托管的項(xiàng)目,團(tuán)隊(duì)的理念跳出傳統(tǒng)固有思維,除了支持標(biāo)準(zhǔn)外,還將很多標(biāo)準(zhǔn)里沒(méi)有涉及到或還沒(méi)商定的事做了對(duì)接和實(shí)踐,對(duì)應(yīng)用更加友好。(GitHub鏈接:https://github.com/WasmEdge/WasmEdge)
它對(duì)各種主流的Rust庫(kù)的支持更加完善,支持tokio、Hyper、reqwest等庫(kù),能夠被K8s等容器工具管理。
此外,它對(duì)網(wǎng)絡(luò)庫(kù)支持也較好,對(duì)MySQL數(shù)據(jù)庫(kù)也進(jìn)行了一些優(yōu)化。這些能力可以幫助我們做輕量級(jí)serverless。
兩者可以很好地協(xié)同使用:比如,用Docker部署一個(gè)完整的微服務(wù),然后用WasmEdge運(yùn)行該服務(wù)中的熱點(diǎn)函數(shù)等,提升效率,共同推進(jìn)云原生應(yīng)用的發(fā)展。
6、主流容器工具對(duì)Wasm容器的支持
主流容器工具對(duì)Wasm容器的支持很重要,可以幫助開(kāi)發(fā)者將Wasm容器部署到Kubernetes或Docker components之中。
圖片
上圖中展示出基本調(diào)度管理平臺(tái)模式:Highlevel容器運(yùn)行時(shí)和lowlevel容器時(shí)的關(guān)系。
其中一個(gè)重要的lowlevel運(yùn)行名稱是crun。crun從1.5版本時(shí)就開(kāi)始支持WasmEdge。每個(gè)版本里都對(duì)WasmEdge容器進(jìn)行了各種修訂和擴(kuò)展支持。所以,目前來(lái)講,Crun對(duì)Wasm體系的支持比較友好。
所以,當(dāng)用Crun“跑”Wasm鏡像時(shí),Crun一般會(huì)根據(jù)鏡像注釋里的標(biāo)記判斷它要啟動(dòng)的是Linux容器還是wasm容器。
7、總結(jié)與展望:用更先進(jìn)的容器技術(shù)控制計(jì)算力度
微服務(wù)發(fā)展至今已深入人心。未來(lái),我們期待用更先進(jìn)、力度更小的容器技術(shù)減少微服務(wù)計(jì)算力度。
“我們會(huì)與開(kāi)源團(tuán)隊(duì)努力開(kāi)展實(shí)驗(yàn),在實(shí)驗(yàn)成功之時(shí)能夠匯報(bào)給大家,也希望大家能夠用更先進(jìn)的容器控制計(jì)算力度,”呂藝說(shuō)。
呂藝最后強(qiáng)調(diào):“現(xiàn)在,我們將輕量級(jí)WebAssembly容器都部署到重量級(jí)Kubernetes上;我們期待未來(lái)有更輕量化、更適合WebAssembly的編排技術(shù)出現(xiàn)?!?/p>