原文鏈接:https://www.freebuf.com/articles/network/269379.html
近年來,隨著云計(jì)算概念和技術(shù)的普及,云原生一詞也越來越熱門,無論是應(yīng)用還是安全,凡是和云相關(guān)的,都要在云后面加上原生二字,好像不提云原生,在技術(shù)上就落后了一大截。
隨著云計(jì)算技術(shù)的發(fā)展,企業(yè)上云已成為趨勢(shì),越來越多的企業(yè)都已將應(yīng)用部署到了云上。但是應(yīng)用上云并不意味著就能充分利用云平臺(tái)的優(yōu)勢(shì)。目前,大部分云化的應(yīng)用,都是基于傳統(tǒng)的軟件架構(gòu)來搭建的,然后再移植到云上去運(yùn)行,和云平臺(tái)的整合度非常低,主要表現(xiàn)在以下幾個(gè)方面:傳統(tǒng)應(yīng)用程序和底層操作系統(tǒng)、硬件、存儲(chǔ)和后備服務(wù)之間存在緊密的依賴關(guān)系,這些依賴關(guān)系使得應(yīng)用程序在跨越云基礎(chǔ)設(shè)施進(jìn)行遷移和擴(kuò)展時(shí)非常復(fù)雜且有風(fēng)險(xiǎn)。傳統(tǒng)的企業(yè)應(yīng)用多采用單體架構(gòu),將許多不同的功能模塊捆綁在一個(gè)部署包中,導(dǎo)致功能模塊之間產(chǎn)生不必要的依賴,并導(dǎo)致開發(fā)和部署過程中喪失敏捷性,無法獨(dú)立的部署、發(fā)布更新、重啟。通過手工管理基礎(chǔ)設(shè)施,包括手工編寫管理服務(wù)器、網(wǎng)絡(luò)和存儲(chǔ)的配置腳本。在大規(guī)模復(fù)雜的操作中,操作人員在診斷問題時(shí)會(huì)很慢,而且無法大規(guī)模地實(shí)施。手工制作的自動(dòng)化腳本還有可能將人為錯(cuò)誤硬編碼到基礎(chǔ)設(shè)施中。基于虛擬機(jī)的基礎(chǔ)設(shè)施相對(duì)于基于微服務(wù)的應(yīng)用程序來說,是緩慢而低效的。因?yàn)閱蝹€(gè)虛擬機(jī)啟動(dòng)/關(guān)閉的速度很慢,并且在部署應(yīng)用程序代碼之前就會(huì)帶來巨大的開銷。傳統(tǒng)應(yīng)用的開發(fā)模式,IT團(tuán)隊(duì)定期發(fā)布軟件,通常間隔幾周或幾個(gè)月。盡管發(fā)布的許多組件已經(jīng)提前準(zhǔn)備好了,并且沒有依賴關(guān)系,也必須等待版本中的其他組件。客戶想要的功能被延遲,企業(yè)失去贏得客戶和增加收入的機(jī)會(huì)。總體來說,提供方便的基礎(chǔ)設(shè)施,只是對(duì)云計(jì)算最初級(jí)的利用(提升利用率,按需使用,不夠了隨時(shí)擴(kuò)容),無法充分發(fā)揮云計(jì)算的優(yōu)勢(shì),要想充分發(fā)揮云計(jì)算的優(yōu)勢(shì)(彈性、高可用性、易擴(kuò)展性),就必須進(jìn)行真正的云化,不僅僅是基礎(chǔ)設(shè)施和平臺(tái)的變化,應(yīng)用也需要做出改變,這就需要擯棄傳統(tǒng)的方法,在架構(gòu)設(shè)計(jì)、開發(fā)方式、部署維護(hù)等各個(gè)階段和方面都基于云的特點(diǎn)重新設(shè)計(jì),從而建設(shè)全新的云化的應(yīng)用,也就是云原生的應(yīng)用。
關(guān)于什么是云原生,不同的人定義不同,目前比較權(quán)威的定義主要來自Pivotal公司和云原生計(jì)算基金會(huì)(Cloud Native Computing Foundation,簡(jiǎn)稱CNCF)。Pivotal公司是云原生應(yīng)用的提出者,并推出了Cloud Foundry和Spring系列開發(fā)框架,因此,也是云原生的先驅(qū)者和探路者。早在2015年,Pivotal公司的Matt Stine寫了一本名為《遷移到云原生應(yīng)用架構(gòu)》的小冊(cè)子,其中探討了云原生應(yīng)用架構(gòu)的幾個(gè)主要特征:符合12因素的應(yīng)用、面向微服務(wù)架構(gòu)、自服務(wù)敏捷架構(gòu)、基于API的協(xié)作以及抗脆弱性。在2017年10月,接受InfoQ采訪時(shí),Matt Stine對(duì)云原生的定義做了小幅調(diào)整,將云原生架構(gòu)定義為具有以下六個(gè)特質(zhì):模塊化(Modularity)、可觀測(cè)性(Observability)、可部署性(Deployability)、可測(cè)試性(Testability)、可處理性(Disposability)以及可替換性(Replaceability)。而Pivotal官網(wǎng)對(duì)云原生概括為4個(gè)要點(diǎn):DevOps、持續(xù)交付、微服務(wù)以及容器化。Matt Stine認(rèn)為云原生是一個(gè)思想的集合,云原生既包含技術(shù)(微服務(wù),敏捷基礎(chǔ)設(shè)施),也包含管理(DevOps、持續(xù)交付、康威定律以及重組等),云原生也可以說是一系列云技術(shù)、企業(yè)管理方法的集合。CNCF是在2015年由Google聯(lián)合Linux基金會(huì)成立的,它是一個(gè)非盈利組織,主要宗旨是統(tǒng)一云計(jì)算接口和相關(guān)標(biāo)準(zhǔn),通過技術(shù)優(yōu)勢(shì)和用戶價(jià)值創(chuàng)造一套新的通用容器技術(shù),推動(dòng)云計(jì)算和服務(wù)的發(fā)展。起初CNCF對(duì)云原生(Cloud Native)的定義包含以下三個(gè)方面:應(yīng)用容器化
面向微服務(wù)架構(gòu)
應(yīng)用支持容器的編排調(diào)度
到了2018年,隨著云原生生態(tài)的不斷壯大,所有主流云計(jì)算供應(yīng)商都加入了該基金會(huì),且從云原生的全景圖中可以看出云原生正在蠶食原先非云原生應(yīng)用的部分。CNCF基金會(huì)中的會(huì)員以及容納的項(xiàng)目越來越多,該定義已經(jīng)限制了云原生生態(tài)的發(fā)展,CNCF為云原生進(jìn)行了重新定位,并于2018年6月11日明確了云原生定義1.0版本:云原生技術(shù)有利于各組織在公有云、私有云和混合云等新型動(dòng)態(tài)環(huán)境中,構(gòu)建和運(yùn)行可彈性擴(kuò)展的應(yīng)用。云原生的代表技術(shù)包括容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式API。這些技術(shù)能夠構(gòu)建容錯(cuò)性好、易于管理和便于觀察的松耦合系統(tǒng)。結(jié)合可靠的自動(dòng)化手段,云原生技術(shù)使工程師能夠輕松地對(duì)系統(tǒng)作出頻繁和可預(yù)測(cè)的重大變更。
依據(jù)CNCF發(fā)布的云原生1.0版本的定義,云原生技術(shù)主要包括容器、微服務(wù)、服務(wù)網(wǎng)格、不可變基礎(chǔ)設(shè)施以及聲明式API,下面就這幾類技術(shù)做個(gè)概述:容器技術(shù)和云原生好比一對(duì)螺旋體,容器技術(shù)催生了云原生思潮,云原生生態(tài)推動(dòng)了容器技術(shù)發(fā)展。從2013年Docker技術(shù)誕生,到2015年CNCF這個(gè)云原生領(lǐng)域重量級(jí)聯(lián)盟成立,這不是歷史的巧合而是歷史的必然。作為云原生關(guān)鍵技術(shù)之一的容器,從2013年誕生以來一直是行業(yè)關(guān)注的焦點(diǎn)之一。2013年之前,云計(jì)算行業(yè)一直在為云原生的正確打開姿勢(shì)而操心。Platform as a Service(PaaS)看起來是個(gè)有前途的方向。2006年Fotango公司發(fā)布的Zimi服務(wù),可以說是PaaS行業(yè)的鼻祖,具有按使用付費(fèi)、免運(yùn)維(Serverless)、API化配置和服務(wù)等典型云原生的特征;2008年Google推出Google App Engine(GAE);2011年P(guān)ivotal發(fā)布Cloud Foundry。這些早期的PaaS平臺(tái)在云原生領(lǐng)域進(jìn)行了非常有益的探索,推動(dòng)了云原生生態(tài)的健康發(fā)展,但是這些早期探索技術(shù)并沒有形成大的行業(yè)趨勢(shì),而是局限在一些的特定的領(lǐng)域。直到Docker開源,大家才如夢(mèng)方醒,原來不是方向不對(duì),而是應(yīng)用分發(fā)和交付的手段不行。Docker真正核心的創(chuàng)新是容器鏡像(docker image),一種新型的應(yīng)用打包、分發(fā)和運(yùn)行機(jī)制。容器鏡像將應(yīng)用運(yùn)行環(huán)境,包括代碼、依賴庫、工具、資源文件和元信息等,打包成一種操作系統(tǒng)發(fā)行版無關(guān)的不可變更軟件包。容器鏡像打包了整個(gè)容器運(yùn)行依賴的環(huán)境,以避免依賴運(yùn)行容器的服務(wù)器的操作系統(tǒng),從而實(shí)現(xiàn)“build once, run anywhere”。容器鏡像一旦構(gòu)建完成,就變成read only,成為不可變基礎(chǔ)設(shè)施的一份子。微服務(wù)架構(gòu)是相對(duì)于單體架構(gòu)來說的,兩者分屬不同的架構(gòu)風(fēng)格。在微服務(wù)架構(gòu)中,服務(wù)是一個(gè)單一的、可獨(dú)立部署的軟件組件,它實(shí)現(xiàn)了一些有用的功能,服務(wù)的API封裝了其內(nèi)部實(shí)現(xiàn),與單體架構(gòu)不同,開發(fā)人員無法繞過服務(wù)的API直接訪問服務(wù)內(nèi)部的方法和數(shù)據(jù),因此,微服務(wù)架構(gòu)強(qiáng)制實(shí)現(xiàn)了應(yīng)用程序的模塊化。微服務(wù)架構(gòu)的最核心特性是服務(wù)之間的松耦合性。服務(wù)之間的交互采用API完成,這樣做就封裝了服務(wù)的實(shí)現(xiàn)細(xì)節(jié),從而實(shí)現(xiàn)了在不影響客戶端的情況下,對(duì)實(shí)現(xiàn)方式做出修改。微服務(wù)架構(gòu)通過將大的系統(tǒng)按照業(yè)務(wù)服務(wù)的粒度進(jìn)行拆分,每個(gè)服務(wù)可獨(dú)立開發(fā)、測(cè)試、驗(yàn)證和部署,這樣分解后,帶來的好處有如下幾點(diǎn):使大型的復(fù)雜應(yīng)用程序可以持續(xù)交付和持續(xù)部署
每個(gè)服務(wù)都相對(duì)較小并容易維護(hù)
服務(wù)可以獨(dú)立部署
服務(wù)可以獨(dú)立擴(kuò)展
微服務(wù)架構(gòu)可以實(shí)現(xiàn)團(tuán)隊(duì)的自治
更容易實(shí)驗(yàn)和采納新的技術(shù)
更好的容錯(cuò)性
服務(wù)網(wǎng)格是用于處理服務(wù)間通信的專用基礎(chǔ)設(shè)施層,負(fù)責(zé)在微服務(wù)間進(jìn)行可靠地請(qǐng)求傳遞。服務(wù)網(wǎng)格通常通過一組輕量級(jí)網(wǎng)絡(luò)代理來實(shí)現(xiàn),這些代理與應(yīng)用程序代碼一起部署,而不需要感知應(yīng)用程序本身。隨著規(guī)模和復(fù)雜性的增長,服務(wù)網(wǎng)格包含的實(shí)現(xiàn)的功能越來越多,它的需求包括服務(wù)發(fā)現(xiàn)、負(fù)載均衡、故障恢復(fù)、指標(biāo)收集和監(jiān)控以及通常更加復(fù)雜的運(yùn)維需求,例如A/B測(cè)試、金絲雀發(fā)布、限流、訪問控制和端到端認(rèn)證等。其部署結(jié)構(gòu)如下圖所示:服務(wù)網(wǎng)格有如下幾個(gè)特點(diǎn):
如果用一句話來解釋什么是服務(wù)網(wǎng)格,可以將它比作是應(yīng)用程序或者說微服務(wù)間的TCP/IP,負(fù)責(zé)服務(wù)之間的網(wǎng)絡(luò)訪問、限流、熔斷和監(jiān)控。對(duì)于編寫應(yīng)用程序來說一般無須關(guān)心TCP/IP這一層(比如通過HTTP協(xié)議的RESTful應(yīng)用),同樣使用服務(wù)網(wǎng)格也就無須關(guān)系服務(wù)之間的那些原來是通過應(yīng)用程序或者其他框架實(shí)現(xiàn)的事情,比如Spring Cloud、OSS,現(xiàn)在只要交給服務(wù)網(wǎng)格就可以了,從而極大地方便了微服務(wù)應(yīng)用的開發(fā)。一個(gè)工作負(fù)載(比如容器、虛擬機(jī)等)一旦部署以后就不會(huì)被修改。當(dāng)需要更新,修復(fù)或修改某些內(nèi)容的時(shí)候,只需要將新的、經(jīng)過驗(yàn)證的工作負(fù)載替換舊的即可。不可變基礎(chǔ)設(shè)施的作用主要體現(xiàn)在系統(tǒng)的穩(wěn)定性方面。傳統(tǒng)的應(yīng)用程序一旦部署到用戶特定的服務(wù)器上以后,服務(wù)器系統(tǒng)是會(huì)不斷變化的,不是操作系統(tǒng)升級(jí),就是安裝了新的應(yīng)用,可能引起沖突,導(dǎo)致應(yīng)用程序需要跟著用戶系統(tǒng)環(huán)境的改變而不斷升級(jí),這中間就會(huì)不斷地出現(xiàn)新的問題。而不可變基礎(chǔ)設(shè)施就規(guī)避了所有的這些問題,因?yàn)樵圃鷳?yīng)用是部署在不可變的基礎(chǔ)設(shè)施上的,因此就不存在變化的問題。聲明式API是一種比命令式API更高級(jí)的接口設(shè)計(jì)方式,簡(jiǎn)單來說,命令式API提供給用戶怎么做的能力,而聲明式API給用戶提供了做什么的能力。聲明式API是比命令式API更高級(jí)的一種接口,舉個(gè)例子,假如我們有一個(gè)炒菜機(jī),如果炒菜機(jī)提供的接口是放油、放調(diào)料、放食材、大火、小火等操作,那就是命令式API。如果炒菜機(jī)提供的接口是來盤宮保雞丁、來盤魚香肉絲之類的,那就是聲明式API了。聲明式API比較典型的例子就是數(shù)據(jù)庫提供的SQL接口,只需要告訴數(shù)據(jù)庫你需要什么數(shù)據(jù)即可,至于怎么去獲取這些數(shù)據(jù),數(shù)據(jù)庫自己會(huì)去按步驟操作。
傳統(tǒng)的軟件開發(fā)模式,在使用云計(jì)算平臺(tái)時(shí)和使用物理機(jī)時(shí)沒有什么大的區(qū)別,那么就沒有將云平臺(tái)的能力利用充分,在一定程度上導(dǎo)致了資源的浪費(fèi)。云原生就是用來解決這一類的問題,將云計(jì)算平臺(tái)的優(yōu)勢(shì)發(fā)揮到極致。讓企業(yè)應(yīng)用能夠利用云平臺(tái)實(shí)現(xiàn)資源的按需分配和彈性伸縮,是云原生應(yīng)用重點(diǎn)關(guān)注的地方。它要求云原生應(yīng)用具備可用性和伸縮性,以及自動(dòng)化部署和管理能力,可隨處運(yùn)行,并且能夠通過持續(xù)集成、持續(xù)交付提升研發(fā)、測(cè)試與發(fā)布的效率。云原生應(yīng)用并未完全顛覆傳統(tǒng)的應(yīng)用,采用云原生的設(shè)計(jì)模式可以優(yōu)化和改進(jìn)傳統(tǒng)應(yīng)用模式,使應(yīng)用更加適合在云平臺(tái)上運(yùn)行。云原生存在的意義是解放開發(fā)和運(yùn)維,而不是讓開發(fā)和運(yùn)維的工作變得更加復(fù)雜和繁重。云原生還關(guān)注規(guī)模,分布式系統(tǒng)應(yīng)該具備將節(jié)點(diǎn)進(jìn)行水平擴(kuò)展的能力,能輕易地?cái)U(kuò)展到成千上萬的規(guī)模,并且這些節(jié)點(diǎn)具備多租戶和自愈能力。云原生使得應(yīng)用本身具備“柔性”,即面對(duì)強(qiáng)大壓力的緩解能力以及壓力過后的恢復(fù)能力。
作為云原生領(lǐng)域最具權(quán)威的組織,CNCF在每年的年度報(bào)告中都會(huì)提及CNCF Landscape項(xiàng)目,該項(xiàng)目開始于2016年11月,旨在為云原生應(yīng)用者提供一個(gè)資源地圖,幫助企業(yè)和開發(fā)人員快速了解云原生體系的全貌。CNCF Landscape項(xiàng)目在Github上已經(jīng)獲得超過7000顆星,表明廣大開發(fā)者和使用者對(duì)該項(xiàng)目的關(guān)注和重視。該項(xiàng)目給出當(dāng)前云原生生態(tài)的全景圖(如下圖所示),通過該全景圖我們可以了解云原生相關(guān)的各種類型的項(xiàng)目和產(chǎn)品:這張全景圖從云原生的層次結(jié)構(gòu),以及不同的功能組成上,展現(xiàn)了云原生體系的全貌,可以幫助用戶在不同組件層次去選擇恰當(dāng)?shù)能浖凸ぞ哌M(jìn)行支持??傮w來看,云原生生態(tài)分為以下幾層:圖中最底層是Kubernetes認(rèn)證的服務(wù)提供商(包括公有云提供商AWS、Google、Azure、Ali、Baidu以及Tencent等,以及私有云提供商諧云、靈雀云、博云、才云、DaoCloud以及Rancher等)以及Kubernetes認(rèn)證的培訓(xùn)伙伴。有了物理機(jī)或虛擬機(jī)后,在運(yùn)行容器化服務(wù)之前,需要為容器準(zhǔn)備標(biāo)準(zhǔn)化的基礎(chǔ)環(huán)境,這就是Provisioning這一層的作用。在Provisioning這一層中,分為以下幾個(gè)功能組成模塊:Automation & Configuration:用于自動(dòng)化部署和配置容器運(yùn)行平臺(tái)和環(huán)境,代表工具和廠商包括Ansible、Chef、Puppet、VMware以及OpenStack。
容器鏡像庫:容器鏡像庫是整個(gè)CNCF云原生中的核心部件之一,因?yàn)榛谌萜鞯倪\(yùn)行環(huán)境中,所有的應(yīng)用都需要借助容器鏡像庫來進(jìn)行安裝和部署。容器鏡像庫又分為公有和私有,公有的容器鏡像庫包括docker官方的registry,AWS的Elastic Container Registry,Google的Container Registry等。在私有鏡像庫中,VMware中國團(tuán)隊(duì)主導(dǎo)的Harbor得到了廣泛的應(yīng)用,大量的容器平臺(tái)目前都基于Harbor構(gòu)建其鏡像倉庫。
Security & Compliance:Notary和TUF(The Upgrade Framework)是這個(gè)領(lǐng)域兩個(gè)主要的項(xiàng)目,其中TUF是一個(gè)開源的安全標(biāo)準(zhǔn),Notary是其中一個(gè)實(shí)現(xiàn)。Notary軟件除了確保軟件的出處外,它還能保證在未經(jīng)容器鏡像提供者批準(zhǔn)的情況下,不會(huì)在鏡像供應(yīng)鏈的任何地方修改鏡像內(nèi)的內(nèi)容,從而確保從開發(fā)到運(yùn)營的過程中,安全都被無縫統(tǒng)一地嵌入到整個(gè)工作流中。
Key Management:主要用于在整個(gè)容器平臺(tái)中進(jìn)行秘鑰管理。
Runtime這一層可以理解為容器的整個(gè)運(yùn)行環(huán)境,是云原生中最核心的部分,它包括了計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)三大塊:Container Runtime:Docker是最廣為人知的容器運(yùn)行環(huán)境,但生產(chǎn)環(huán)境下也有一些其他的容器環(huán)境在運(yùn)行。Containerd是滿足OCI規(guī)范的核心容器運(yùn)行時(shí),從設(shè)計(jì)上就是為了嵌入大型系統(tǒng)的。它由Docker Inc公司啟動(dòng),并且在2017年3月份捐贈(zèng)給了CNCF。此外,CoreOS的RKT是一個(gè)用于在Linux上運(yùn)行應(yīng)用程序容器的CLI,也可以作為安全、可組合和基于標(biāo)準(zhǔn)的容器虛擬化運(yùn)行環(huán)境。
Cloud-Native Storage:起初,容器為無狀態(tài)的運(yùn)行單元,容器最上一層文件系統(tǒng)無法保存其在運(yùn)行時(shí)寫入的文件或數(shù)據(jù),容器重建或重啟后,這些寫入的數(shù)據(jù)將丟失。但隨著數(shù)據(jù)庫、消息隊(duì)列等中間件逐步在容器環(huán)境中得到應(yīng)用,如今用戶對(duì)容器持久化存儲(chǔ)的理解和需求也更加深入和迫切。
Cloud-Native Network:網(wǎng)絡(luò)歷來是虛擬化技術(shù)中最靈活多變的部分,目前,大多數(shù)客戶使用的主要包括Calico、Flannel、Open vSwitch等方案。
這一層主要負(fù)責(zé)容器平臺(tái)的編排和調(diào)度,包括服務(wù)的發(fā)現(xiàn)和治理,遠(yuǎn)程調(diào)用,服務(wù)代理,微服務(wù)治理等組件,包括:計(jì)劃與編排:在這個(gè)領(lǐng)域,Kubernetes是當(dāng)仁不讓的頭號(hào)玩家,目前基于Kubernetes的容器生態(tài)得到了迅速發(fā)展。其它的編排工具還包括Mesos和Docker Swarm等。
協(xié)調(diào)與服務(wù)發(fā)現(xiàn):分布式計(jì)算中很重要的一點(diǎn)就是各個(gè)服務(wù)之間的協(xié)同以及服務(wù)發(fā)現(xiàn)(或節(jié)點(diǎn)發(fā)現(xiàn)的問題),從老牌的ZooKeeper到近年來在很多互聯(lián)網(wǎng)廠商和應(yīng)用中流行的Consul(Docker Swarm默認(rèn)使用),都可以用于分布式服務(wù)的發(fā)現(xiàn)和配置,Kubernetes默認(rèn)使用的則是CoreOS旗下的etcd。
遠(yuǎn)程過程調(diào)用:微服務(wù)間進(jìn)行通信,通常有兩種方式,一種是HTTP REST-JSON的方式,另一種為RPC方式,兩者相比,RPC方式效率更高。常用的包括Google開源的GRPC、Apache旗下的Thrift框架、Netflix開源的自帶負(fù)載均衡的Ribbon和Avra數(shù)據(jù)序列化框架。
App Definition and Development這一層就是容器平臺(tái)上運(yùn)行的具體應(yīng)用和工具了,可以理解為容器平臺(tái)的應(yīng)用商店。根據(jù)應(yīng)用的不同作用的使用場(chǎng)景,可以大致分為以下幾種類型:數(shù)據(jù)庫(例如MySQL、MariaDB、MongoDB、PostgreSQL、Cassandra、TiDB等)、流處理和消息隊(duì)列(例如Spark、Storm、RocketMQ、Kafka、RabbitMQ等)、應(yīng)用和鏡像制作(用于將應(yīng)用封裝成標(biāo)準(zhǔn)鏡像,使應(yīng)用能在標(biāo)準(zhǔn)的容器平臺(tái)上運(yùn)行,例如Helm、Docker Composer、Packer等)、CI/CD(最常見的Jenkins、Atlassian公司開發(fā)的Bamboo等)。從橫向上看,整個(gè)云原生還包括眾多的經(jīng)過認(rèn)證的平臺(tái)供應(yīng)商。Observability and Analysis這個(gè)部分包含了大量用于對(duì)平臺(tái)進(jìn)行監(jiān)控(Prometheus、Nagios、Grafana、Zabbix等)、日志(Fluentd、ElasticSearch、Logstash)、以及追蹤(Jaeger)的工具。綜上所述,CNCF Landscape全景圖中包含了CNCF社區(qū)成熟或使用范圍較廣、具有最佳實(shí)踐的產(chǎn)品和方案供用戶在實(shí)際應(yīng)用中選擇,而且該生態(tài)還在快速發(fā)展中。
關(guān)于如何實(shí)現(xiàn)云原生應(yīng)用,CNCF給出了比較詳細(xì)的利用開源軟件和云原生技術(shù)的參考路線圖,如下圖所示:整個(gè)路線圖分成了十個(gè)步驟,每個(gè)步驟都是用戶或平臺(tái)開發(fā)者將云原生技術(shù)在實(shí)際環(huán)境中落地時(shí),需要循序漸進(jìn)思考和處理的問題:目前最流行的容器化技術(shù)是Docker,你可以將任意大小的應(yīng)用程序和依賴項(xiàng),甚至在模擬器上運(yùn)行的一些程序,都進(jìn)行容器化。隨著時(shí)間的推移,你還可以對(duì)應(yīng)用程序進(jìn)行分割,并將未來的功能編寫為微服務(wù)。CI/CD(持續(xù)集成和持續(xù)發(fā)布)創(chuàng)建CI/CD環(huán)境,從而使源代碼上的任意修改,都能夠自動(dòng)通過容器進(jìn)行編譯和測(cè)試,并被部署到預(yù)生產(chǎn)甚至生產(chǎn)環(huán)境中。Kubernetes是目前市場(chǎng)上應(yīng)用編排領(lǐng)域被最廣泛應(yīng)用的工具,Helm Charts可以用來幫助應(yīng)用開發(fā)和發(fā)布者用于升級(jí)Kubernetes上運(yùn)行的應(yīng)用。在這一步中,用戶需要為平臺(tái)選擇監(jiān)控、日志以及跟蹤的相關(guān)工具,例如將Prometheus用于監(jiān)控、Fluentd用于日志、Jaeger用于整個(gè)應(yīng)用調(diào)用鏈的跟蹤。CoreDNS、Envoy和LInkerd可以分別用于服務(wù)發(fā)現(xiàn)和服務(wù)治理,提供服務(wù)的健康檢查、請(qǐng)求路由、和負(fù)載均衡等功能。Calico、Flannel以及Weave Net等軟件用于提供更靈活的網(wǎng)絡(luò)功能。分布式數(shù)據(jù)庫可以提供更好的彈性和伸縮性能,但同時(shí)需要專業(yè)的容器存儲(chǔ)予以支持。當(dāng)應(yīng)用需要比JSON-REST這個(gè)模式更高的性能時(shí),可以考慮使用gRPC或者NATS。gRPC是一個(gè)通用的RPC(遠(yuǎn)程調(diào)用)框架(類似各種框架中的RPC調(diào)用),NATS是一個(gè)發(fā)布/訂閱和負(fù)載均衡的消息隊(duì)列系統(tǒng)。Harbor是目前最受歡迎的容器鏡像庫,同時(shí),你也可以選擇使用不同的容器運(yùn)行環(huán)境用于運(yùn)行容器程序。最后可以借助Notary等軟件用于軟件的安全發(fā)布。- END -
公眾號(hào)后臺(tái)回復(fù)「加群」加入一線高級(jí)工程師技術(shù)交流群,一起交流進(jìn)步。
點(diǎn)亮,服務(wù)器三年不宕機(jī)