中國移動研究院 陳鵬翔
Labs 導(dǎo)讀
2021新年伊始,新冠仍在肆虐,這場人類生命的挑戰(zhàn)改變了人們的生活方式,同時(shí)也推動了移動互聯(lián)網(wǎng)和云計(jì)算服務(wù)的持續(xù)發(fā)展,例如美團(tuán)、盒馬和多點(diǎn)等生鮮生超APP外送或自取的方式被更多人所接受,而這些APP背后都是云原生技術(shù)在做技術(shù)支撐。云原生作為云計(jì)算最佳的使用方式正在被各類行業(yè)應(yīng)用廣泛采納和推廣,在國家大力推動各行業(yè)數(shù)字化轉(zhuǎn)型的契機(jī)下,相信云原生技術(shù)一定會扎根各行業(yè),助力各行各業(yè)的高速發(fā)展。
云原生技術(shù)包羅萬象,本文旨在厘清其核心技術(shù)內(nèi)涵并提供一種有效的評估云原生技術(shù)成熟度的評估方法,并應(yīng)用此方法評估云原生技術(shù)中的容器和微服務(wù)等開源技術(shù)棧,分享業(yè)界云原生相關(guān)的開源項(xiàng)目,并在文章最后給出下一步研究方向。
作者簡介:
陳鵬翔 中國移動研究院研究員,研究方向云原生、微服務(wù)、熟悉開源項(xiàng)目和技術(shù)貢獻(xiàn),曾就職于HP等企業(yè)從事NFV架構(gòu)師工作。
1 云原生技術(shù)和本文范圍
云原生技術(shù)是由Pivotal的Matt Stine于2013年提出,核心內(nèi)容為描述一種應(yīng)用,這應(yīng)用符合12要素、微服務(wù)架構(gòu)、敏捷基礎(chǔ)設(shè)施、基于API協(xié)作和反脆弱性,該描述較為抽象,特別是12要素的具體描述,實(shí)際應(yīng)用起來并不拿來可用。Pivotal于2017年更新了一個(gè)具象的描述:云原生是一種構(gòu)建和運(yùn)行應(yīng)用的方法,他利用了云計(jì)算交付模型的優(yōu)勢,企業(yè)需要一個(gè)平臺來構(gòu)建和管理云原生應(yīng)用程序和服務(wù),該平臺實(shí)現(xiàn)了自動化且集成了DevOps、持續(xù)部署、微服務(wù)和容器等關(guān)鍵技術(shù)。這個(gè)描述更加偏重于平臺側(cè)應(yīng)具備的能力,與“公要善其事必先利其器”如出一轍。這一點(diǎn)上CNCF(Cloud Native Computing Foundation,后簡稱CNCF)做的更純粹。
CNCF成立于2015年,由Google、思科和Docker等參與成立,給出的云原生定義為容器化封裝、自動化管理和面向微服務(wù)。顯然從一開始,CNCF就立足于平臺側(cè),因?yàn)槠湎碌拈_源容器調(diào)度平臺Kubernetes(后簡稱K8S)在后續(xù)發(fā)生的容器調(diào)度平臺大戰(zhàn)中戰(zhàn)勝了Mesos和Docker Swarm,做云原生技術(shù)的廠商更愿意把開源應(yīng)用放到CNCF進(jìn)行托管。2018年CNCF在托管了服務(wù)網(wǎng)格中的翹楚Envoy和Linkerd后,重新定義了云原生技術(shù)的范圍,包括容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式API。
我們給云原生的定義為:一系列面向云計(jì)算的技術(shù)和管理理念的集合,開發(fā)者要在應(yīng)用架構(gòu)、開發(fā)模式和運(yùn)維部署階段貫穿實(shí)現(xiàn)這種理念,最終達(dá)到降低開發(fā)運(yùn)維復(fù)雜度,最大限度發(fā)揮云計(jì)算的價(jià)值的目的。
核心技術(shù)包含不限于:
容器:是云原生應(yīng)用的封裝事實(shí)標(biāo)準(zhǔn),軟件及其依賴封裝到容器鏡像的內(nèi)部,一次打包,到處部署,通過容器編排調(diào)度實(shí)現(xiàn)敏捷交付,主要包含容器編排、運(yùn)行時(shí)層(容器運(yùn)行時(shí),云原生存儲和云原生網(wǎng)絡(luò))等。
微服務(wù):應(yīng)用開發(fā)方通過標(biāo)準(zhǔn)化服務(wù)化開發(fā)方式,將大型應(yīng)用程序開發(fā)拆解為多個(gè)小型服務(wù)集合的體系方法。更高級的要求是將微服務(wù)基礎(chǔ)能力(比如服務(wù)注冊,服務(wù)熔斷等)同應(yīng)用的業(yè)務(wù)邏輯徹底解耦,使用平臺側(cè)的服務(wù)網(wǎng)格能力。主要包含微服務(wù)支撐層(服務(wù)網(wǎng)格、API網(wǎng)關(guān)和服務(wù)注冊發(fā)現(xiàn))等。
無服務(wù)計(jì)算(Serverless):是一種構(gòu)建和管理基于微服務(wù)架構(gòu)的完整流程,允許在服務(wù)部署級別而不是服務(wù)器部署級別來管理應(yīng)用部署,構(gòu)建或使用一個(gè)微服務(wù)或微功能來響應(yīng)一個(gè)事件。
管理理念包含:
持續(xù)交付:讓單個(gè)應(yīng)用隨時(shí)處于可發(fā)布狀態(tài),通過自動化不斷的將小批量軟件運(yùn)送到生產(chǎn)環(huán)境中,而不用等待與其他變更綁定到一次發(fā)布中。
DevOps:軟件開發(fā)人員同IT運(yùn)維運(yùn)營人員之間的高效協(xié)作方式。采用DevOps研發(fā)模式、自動化工具,實(shí)現(xiàn)軟件開發(fā)、測試、部署、維護(hù)一體化迭代。
不可變基礎(chǔ)設(shè)施:應(yīng)用的微服務(wù)部署之后,內(nèi)容不可修改,修改的方式就是替換這個(gè)應(yīng)用的微服務(wù);也就是說在生產(chǎn)環(huán)境基礎(chǔ)設(shè)施的各層組件(從os、虛擬機(jī)到集群,節(jié)點(diǎn)管理和單個(gè)節(jié)點(diǎn)的安裝軟件配置)中僅通過替換組件而不是修改組件來更改基礎(chǔ)設(shè)施,以此來降低系統(tǒng)的依賴和復(fù)雜度。
云原生是一個(gè)從應(yīng)用向下拆解的過程,根據(jù)云原生的核心理念,作為云原生平臺能力的提供方,構(gòu)建云原生平臺應(yīng)具備如下核心能力:(見圖1)
圖1
云原生技術(shù)體系以容器編排調(diào)度為核心,南向接口通過多種容器運(yùn)行時(shí)、存儲和網(wǎng)絡(luò)插件可對接異構(gòu)的基礎(chǔ)設(shè)施層(即傳統(tǒng)云計(jì)算層),北向接口提供標(biāo)準(zhǔn)聲明式API和用戶自定義資源(CRD)接口,便于構(gòu)建平臺上的平臺,這些平臺包括微服務(wù)支撐層,應(yīng)用定義與開發(fā)層和觀察與分析層,同時(shí)支持無服務(wù)計(jì)算這種新型服務(wù)形態(tài)。
由于云原生技術(shù)范圍較大,本文研究范圍為圖1中的紅色框紅色字體的技術(shù)棧:容器編排調(diào)度,服務(wù)網(wǎng)格,服務(wù)注冊發(fā)現(xiàn),API網(wǎng)關(guān)和無服務(wù)計(jì)算,分析在眾多開源項(xiàng)目中組件選型中的技術(shù)成熟度。
2 云原生技術(shù)成熟度評估方法
圖2
云原生技術(shù)成熟度評估模型的評估指標(biāo)分為兩大類,一類是開源軟件通用評估指標(biāo),一類是軟件專用功能指標(biāo),每類指標(biāo)有各自評估維度和算法,最終評估標(biāo)準(zhǔn),按照
總分=開源軟件通用評估結(jié)果* 60% + 軟件專用功能評估結(jié)果 * 40%
根據(jù)量化分值情況判斷技術(shù)的成熟度水平。以服務(wù)網(wǎng)格的通用指標(biāo)和專用指標(biāo)為例,看下指標(biāo)類中權(quán)重最高的3個(gè)指標(biāo)項(xiàng)的具體內(nèi)容:
通用指標(biāo):占比最高的3個(gè)指標(biāo)項(xiàng)為托管代碼受關(guān)注數(shù)量、代碼貢獻(xiàn)者數(shù)量和主導(dǎo)團(tuán)隊(duì)。
托管代碼,該指標(biāo)受關(guān)注數(shù)量以Github為例,星標(biāo)代表托管代碼受關(guān)注數(shù)量,星標(biāo)數(shù)量越高,代表該項(xiàng)目更受大家關(guān)注,注冊了Github的用戶均可以對關(guān)注的項(xiàng)目加星標(biāo),定量指標(biāo),20000以上為滿分
代碼貢獻(xiàn)者數(shù)量,該指標(biāo)直接反應(yīng)了代碼在行業(yè)內(nèi)的應(yīng)用情況,代碼貢獻(xiàn)者越多,證明基于該代碼進(jìn)行商用轉(zhuǎn)化程度多高,定量指標(biāo),500人以上為滿分
主導(dǎo)團(tuán)隊(duì),代碼開源初期大多有單獨(dú)廠商主導(dǎo)開源,好處是如果廠商能力強(qiáng),軟件發(fā)展方向明確,項(xiàng)目會在短期快速發(fā)展,但對后期加入的廠商來說,會面臨缺乏話語權(quán)問題,會導(dǎo)致代碼出現(xiàn)眾多分支,定量指標(biāo),代碼托管3年以上且委員會成員7個(gè)廠商以上為滿分
專用指標(biāo):占比最高的3個(gè)指標(biāo)項(xiàng)為多開發(fā)語言支持,代碼侵入性和性能影響。
多開發(fā)語言支持,微服務(wù)同軟件開發(fā)緊密相關(guān),針對java,C#,go等語言都各自使用的微服務(wù)框架;第二代微服務(wù)框架也提供了支持多語言的能力,定性指標(biāo),支持多語言為滿分
代碼侵入性,早期微服務(wù)框架與開發(fā)語言綁定,配置信息會編譯到代碼內(nèi)部;第二代微服務(wù)框架提供了無侵入式的方式,定性指標(biāo),完全無侵入,應(yīng)用無感知為滿分
性能影響,微服務(wù)組件參與到軟件內(nèi)部通訊中,性能問題會導(dǎo)致整個(gè)軟件提供服務(wù)能力的下降;以無服務(wù)代理時(shí)能力為基準(zhǔn),定量指標(biāo),下降10%以內(nèi)為滿分
3 云原生技術(shù)成熟度評估結(jié)果
此次主要評估的開源軟件大部分來源于CNCF托管項(xiàng)目,容器調(diào)度編排涉及K8S、Swarm和Mesos,服務(wù)網(wǎng)格涉及Istio和Linkerd,服務(wù)發(fā)現(xiàn)涉及Zookeeper、Etcd和Nacos,API網(wǎng)關(guān)涉及Ambassador、Kong和Sentinel,Serverless涉及Knative、Kubeless和OpenFaaS。
3.1 容器編排
從通用和專用兩個(gè)方面看,K8S均是大幅度領(lǐng)先,特別是通用評估大類中的主流熱度子類,K8S已經(jīng)將曾經(jīng)從事Openstack、Swarm和Mesos的高端人才集中,以每年更新4個(gè)版本小步快跑的策略保持著技術(shù)上的領(lǐng)先。Mesos的優(yōu)勢在于對Hadoop和Spark等框架的支持,但缺點(diǎn)是架構(gòu)偏重,特別是基于Zookeeper做一致性保證。Swarm的優(yōu)勢在于同Docker綁定,安裝Docker即可使用,同時(shí)缺點(diǎn)是功能單一。K8S的優(yōu)勢在于通過CRI、CNI和CSI對接多種云計(jì)算環(huán)境,通過CRD/Operator等技術(shù)對上支持各種平臺上的平臺。從行業(yè)認(rèn)知來看K8S已經(jīng)是容器調(diào)度編排的事實(shí)標(biāo)準(zhǔn)。
3.2 服務(wù)網(wǎng)格
功能方面,Istio和Linkerd持平,性能方面Linkerd略勝一籌,但國內(nèi)主流的公有云廠商和私有云廠商主要是基于Istio做持續(xù)的優(yōu)化以提供服務(wù)網(wǎng)格能力,并且Istio在螞蟻金服體系內(nèi)經(jīng)歷過大規(guī)模部署和使用。Istio是Google研發(fā)的,原本計(jì)劃于去年貢獻(xiàn)給CNCF,但最終托管在其他組織里,依然掌握在Google手中,相對而言,發(fā)展方向把控上是一家獨(dú)大,Istio的最新版本也經(jīng)歷了從微服務(wù)到單體的巨大改變,主要是彌補(bǔ)其性能損耗上的問題,Istio和Linkerd從技術(shù)的角度看差別很小,考慮遇到問題更容易找到解決辦法,應(yīng)考慮Istio為主要跟蹤技術(shù)棧。
3.3 服務(wù)注冊發(fā)現(xiàn)
服務(wù)注冊發(fā)現(xiàn)模塊整體得分較低,ZooKeeper由于是基于Java框架開發(fā),對應(yīng)用也要求其最好為Java開發(fā),且歷史比較久遠(yuǎn),整體體量過重,已經(jīng)很少有應(yīng)用基于它作為服務(wù)發(fā)現(xiàn)組件,Nacos是阿里開源的,也是基于Java框架開發(fā),但提供TCP/DNS/UDP/TLS等多種方式調(diào)用,其各方面都不太成熟,而Etcd由于是K8S默認(rèn)的服務(wù)注冊發(fā)現(xiàn)組件,安裝量很大,其社區(qū)相對活躍,基于Golang語言開發(fā),較為輕量,且提供HTTP和gRPC方式調(diào)用。建議以Etcd為主要跟蹤技術(shù)棧。
3.4 API網(wǎng)關(guān)
API網(wǎng)關(guān)在整體微服務(wù)體系中處于極為重要的位置,但目前開源軟件整體評分較低,阿里開源的Sentinel更多的是作為一種輔助型插件使用。從生態(tài)和活躍度來看,Kong遙遙領(lǐng)先,Kong的插件有30多種,而Ambassador的插件只有4種。后續(xù)以Kong為主要跟蹤技術(shù)棧
3.5 Serverless
Serverless是一種新型的云計(jì)算提供方式,目前開源軟件整體評分較低,國內(nèi)各大主流公有云廠商的Serverless服務(wù)大都采用自研的方式,各家SDK沒有統(tǒng)一標(biāo)準(zhǔn),且與各自提供的多種云服務(wù)緊密結(jié)合,廠商綁定嚴(yán)重。后續(xù)可以跟蹤業(yè)界是否有統(tǒng)一標(biāo)準(zhǔn),開源軟件方面以Knative為主要跟蹤技術(shù)棧。
4 中國移動發(fā)起的網(wǎng)絡(luò)云云原生開源探索
中國移動研究院也在網(wǎng)絡(luò)云領(lǐng)域積極探索云原生技術(shù)的應(yīng)用場景,主導(dǎo)在Linux基金會發(fā)起業(yè)界首個(gè)面向5G及未來網(wǎng)絡(luò)的云原生PaaS平臺項(xiàng)目—XGVela。
該項(xiàng)目旨在依托云原生理念及技術(shù)在運(yùn)營商網(wǎng)絡(luò)云中引入平臺即服務(wù)(PaaS)功能,使運(yùn)營商可以通過XGVela平臺快速設(shè)計(jì)、開發(fā)、創(chuàng)新、管理網(wǎng)絡(luò)功能和服務(wù)。通過這種方式,運(yùn)營商及設(shè)備商將會更多地關(guān)注于上層業(yè)務(wù),避免陷入復(fù)雜的電信基礎(chǔ)設(shè)施。
XGVela平臺將選擇靈活可擴(kuò)展的PaaS框架,選擇性引用業(yè)界廣泛使用技術(shù)成熟度水平高的General PaaS能力,實(shí)現(xiàn)General PaaS能力的電信級增強(qiáng)適配,并開發(fā)具有強(qiáng)電信特色的Telco PaaS能力。
目前項(xiàng)目技術(shù)委員會由中國移動、中國電信、中國聯(lián)通、愛立信、華為、Intel、Mavenir、Nokia、紅帽、SigScale、STC、風(fēng)河、ZTE等13家國內(nèi)外電信運(yùn)營商、設(shè)備商、云服務(wù)商組成。種子代碼及項(xiàng)目Wiki請參照原文鏈接。
5 后續(xù)研究方向
云原生技術(shù)棧方面,重點(diǎn)研究觀察和分析層的相關(guān)技術(shù),包括監(jiān)控相關(guān)的prometheus及其相關(guān)的exporter,日志相關(guān)的EFK整體解決方案,調(diào)用鏈相關(guān)的Opentracing協(xié)議,Jaeger、Zipkin和Skywarking等APM軟件,這些技術(shù)棧雖然沒有服務(wù)網(wǎng)格等技術(shù)熱度那么受關(guān)注,但是這些技術(shù)棧對于我們了解應(yīng)用云原生化程度以及帶來哪些好處,能夠給出客觀可直觀的數(shù)據(jù)。另一個(gè)需關(guān)注的點(diǎn)就是對于云原生應(yīng)用的封裝方式,目前已經(jīng)具備的Helm,Operator等,2020年微軟與阿里提出的OAM(Open Application Model)標(biāo)準(zhǔn)與參考實(shí)現(xiàn)都是為了更加直觀簡單的描述應(yīng)用,屏蔽或歸攏復(fù)雜的K8S識別的Yaml,為開發(fā)和運(yùn)維云原生應(yīng)用降低門檻,從而促進(jìn)云原生應(yīng)用的普及。
成熟度方面可以從后評估角度,第一,對平臺應(yīng)用效果等方面進(jìn)行評估,平臺能夠提供哪些能力支持云原生應(yīng)用的快速開發(fā),自動化集成部署,便捷運(yùn)維等;第二,對應(yīng)用進(jìn)行評估,應(yīng)用進(jìn)行微服務(wù)改造后,需要給出一個(gè)評估模型去評估微服務(wù)改造的效果。這兩點(diǎn)都需要同前述云原生技術(shù)棧的研究相結(jié)合。
云原生技術(shù)廣袤,并且總有新的技術(shù)棧加入進(jìn)來,結(jié)合不同應(yīng)用場景的開源項(xiàng)目也層出不窮,我們認(rèn)為云原生技術(shù)的推廣和云原生技術(shù)本身的涵蓋范圍的不斷迭代是并行展開的,不能等到云原生技術(shù)完全成型時(shí)再進(jìn)行推廣,因此也在積極通過面向網(wǎng)絡(luò)云的云原生PaaS項(xiàng)目XGVela基于成熟度高的項(xiàng)目推動產(chǎn)業(yè)落地。也許我們正在嘗試推廣的技術(shù)棧以后會被新的技術(shù)棧替代,這也正是技術(shù)的生命力所在。