摘要:
什么是云原生嗎?什么是云原生嗎?
自進(jìn)入云計(jì)算時(shí)代后,大量的新概念、新技術(shù)如雨后春筍般的涌現(xiàn)出來,從早期的openstack、IAAS平臺(tái),到中期的容器技術(shù)、微服務(wù)架構(gòu),再到現(xiàn)在的servicemesh服務(wù)網(wǎng)格技術(shù)、serverless無服務(wù)器架構(gòu)、云原生技術(shù),可謂在云計(jì)算的時(shí)代,我們從未停下前進(jìn)的步伐。而今天要給大家?guī)淼谋闶窃圃夹g(shù)~
那么什么是云原生呢?我們將名詞拆成兩部分—云、原生,這些是相對(duì)于本地應(yīng)用來的,云是相對(duì)于本地而言的,傳統(tǒng)的應(yīng)用都是運(yùn)行在本地機(jī)房的服務(wù)器上,而云的應(yīng)用則是運(yùn)行在云端(如IAAS、PAAS、SAAS)。
原生就是親生的、土生土長的意思,即應(yīng)用一誕生就是基于云的,可以直接在云平臺(tái)上運(yùn)行或非常輕松的遷移到云平臺(tái)。
我們可以這么來定義云原生:一套新的技術(shù)體系、一種新的工作方法論、云計(jì)算發(fā)生的必然導(dǎo)向。
云原生應(yīng)用要運(yùn)行在云平臺(tái),那么就必須要有云的特點(diǎn),比如彈性伸縮、分布式、快速部署、快速迭代、高效、持續(xù)。這可不止是簡(jiǎn)單的把原先在物理服務(wù)器上的應(yīng)用遷移到虛擬機(jī)里,不止是基礎(chǔ)設(shè)施和運(yùn)行平臺(tái)在云上,應(yīng)用架構(gòu)、應(yīng)用開發(fā)方式、應(yīng)用部署方式、應(yīng)用維護(hù)方式全都要做出改變。
云原生的四大核心要素便是微服務(wù)技術(shù)、DevOps、持續(xù)交付、容器化。微服務(wù)技術(shù)使得應(yīng)用原子化,所有的應(yīng)用都可以獨(dú)立的部署、迭代。DevOps使得應(yīng)用可以快速編譯、自動(dòng)化測(cè)試、部署、發(fā)布、回滾,讓開發(fā)和運(yùn)維一體化。持續(xù)交付讓應(yīng)用可以頻繁發(fā)布、快速交付、快速反饋、降低發(fā)布風(fēng)險(xiǎn)。容器使得應(yīng)用整體開發(fā)以容器為基礎(chǔ),形成代碼組件復(fù)用、資源隔離。接下來我們就好好的侃侃這幾門技術(shù)~
微服務(wù)的定義是獨(dú)立部署的、原子的、自治的業(yè)務(wù)組件,業(yè)務(wù)組件彼此之間通過消息中間件進(jìn)行交互,業(yè)務(wù)組件可以按需獨(dú)立伸縮、容錯(cuò)、故障恢復(fù)。
微服務(wù)架構(gòu)的演變可從早期的單體式架構(gòu)、中期的SOA架構(gòu)、后期的微服務(wù)架構(gòu)來看。客戶提出一個(gè)需求時(shí),早期的做法是直接往現(xiàn)有的代碼包里加?xùn)|西,客戶來一個(gè)需求,程序員們就寫一串代碼在里面,來十個(gè)寫十串,來一百個(gè)寫100串,反正就是不斷的加,最后我們的應(yīng)用就變成了一個(gè)巨無霸應(yīng)用,要往里面再加?xùn)|西很難,要保證全面測(cè)試無誤很難,要保證按期上線很難,要保證線上出現(xiàn)了問題快速解決也很難,因?yàn)闋恳话l(fā)而動(dòng)全身,即使是技術(shù)精湛的程序員也不敢輕易的下手做了。
新的解決方案是SOA架構(gòu)(ServiceOrientedArchitecture面向服務(wù)的架構(gòu)),即將業(yè)務(wù)服務(wù)化、抽象化,將整個(gè)業(yè)務(wù)拆分成不同的服務(wù),服務(wù)與服務(wù)之間通過相互依賴提供一系列的功能,通過網(wǎng)絡(luò)調(diào)用。常用的實(shí)現(xiàn)方式是使用ESB(EnterpriseServiceBus企業(yè)服務(wù)總線)來把各個(gè)服務(wù)節(jié)點(diǎn),集成不同系統(tǒng)、不同協(xié)議的服務(wù),通過ESB將消息進(jìn)行轉(zhuǎn)化,實(shí)現(xiàn)不同的服務(wù)互相交互。這個(gè)方案很大程度上解決了巨無霸應(yīng)用的問題,但是對(duì)于ESB的維護(hù)成本卻比較高。
云計(jì)算時(shí)代的到來推動(dòng)應(yīng)用“高內(nèi)聚,低耦合”,高內(nèi)聚就是熟悉同一塊業(yè)務(wù)的人、提供用一個(gè)服務(wù)的模塊聚合在一起,低耦合就是應(yīng)用與應(yīng)用之間沒有緊密強(qiáng)依賴關(guān)系,而高內(nèi)聚低耦合的最佳實(shí)踐便是微服務(wù)架構(gòu)。通過將服務(wù)拆分成單獨(dú)的服務(wù),小型團(tuán)隊(duì)可專注于自己的功能開發(fā)上線,運(yùn)維團(tuán)隊(duì)也可根據(jù)服務(wù)的調(diào)用情況彈性擴(kuò)縮容,符合云計(jì)算時(shí)代的特色,確定是云原生的特性之一了。
DevOps的定義是研發(fā)運(yùn)維一體化,通過自動(dòng)化流程使得軟件過程更加快捷和可靠。它不是一個(gè)產(chǎn)品,而是一種新的團(tuán)隊(duì)工作方式、新的技術(shù)理念。
一個(gè)軟件從0到1的最終交付包含如下階段:市場(chǎng)規(guī)劃、產(chǎn)品規(guī)劃、編碼設(shè)計(jì)、編譯構(gòu)建、部署測(cè)試、發(fā)布上線、后期維護(hù)。
早期的時(shí)候全由一個(gè)人完成了,這個(gè)人一般都是CEO了,他根據(jù)對(duì)市場(chǎng)的洞察感知有了好的idea,自己開發(fā)編碼,編譯打包,進(jìn)行測(cè)試之后在云廠商上買一兩臺(tái)服務(wù)器部署上應(yīng)用就對(duì)外發(fā)布了,這就是瀑布式開發(fā)模型,確認(rèn)好需求后就進(jìn)入開發(fā)階段,直到完成上線。
而隨著使用人群的增加,應(yīng)用的整體維護(hù)開始變得艱難,因?yàn)镃EO對(duì)外要去擴(kuò)展業(yè)務(wù)、對(duì)內(nèi)要繼續(xù)開發(fā)、繼續(xù)維護(hù)應(yīng)用,一個(gè)人實(shí)在干不過來了。
慢慢的團(tuán)隊(duì)里有了產(chǎn)品經(jīng)理、開發(fā)人員、測(cè)試人員、運(yùn)維人員的劃分,由產(chǎn)品經(jīng)理負(fù)責(zé)需求的規(guī)劃、產(chǎn)品交互設(shè)計(jì),研發(fā)人員負(fù)責(zé)編碼、構(gòu)建包,測(cè)試人員負(fù)責(zé)功能測(cè)試和自動(dòng)化測(cè)試、上線發(fā)布,運(yùn)維人員負(fù)責(zé)維護(hù)線上服務(wù)的正常運(yùn)行、擴(kuò)容縮容,這就是敏捷開發(fā)模型,在開發(fā)過程階段測(cè)試介入,快速驗(yàn)證修改問題直到基本無誤后上線部署。這一切所帶來的問題是整體的交付周期變長了,團(tuán)隊(duì)之間溝通合作成本變高了,因此DevOps應(yīng)運(yùn)而生。它將整個(gè)軟件開發(fā)測(cè)試運(yùn)維過程變?yōu)橐惑w化,每完成一個(gè)小的需求點(diǎn)便測(cè)試上線部署,快速驗(yàn)證需求,捕獲用戶,占領(lǐng)市場(chǎng)。
因此DevOps的出現(xiàn)是一種組織架構(gòu)的變革,一種開發(fā)模式的變化,團(tuán)隊(duì)人員在需求規(guī)劃、代碼設(shè)計(jì)、編譯構(gòu)建、測(cè)試部署、上線發(fā)布、后期維護(hù)的過程全程參與,每個(gè)人都對(duì)整體的方案了解清晰,可制定合適的系統(tǒng)架構(gòu)、技術(shù)架構(gòu)、運(yùn)維部署方案。
云計(jì)算時(shí)代的到來帶來了虛擬化、容器、微服務(wù)等新的技術(shù)理念,強(qiáng)調(diào)的是服務(wù)的拆分、精細(xì)化的分工,奠定了DevOps落地的基礎(chǔ)條件,只有當(dāng)服務(wù)拆分的原子化了,整個(gè)團(tuán)隊(duì)密切合作的成本才會(huì)降低,才能實(shí)現(xiàn)云上應(yīng)用的快速迭代,符合云計(jì)算時(shí)代的特色,確定是云原生的特性之二了。
持續(xù)交付的定義就是一直在交付,敏捷開發(fā)和DevOps要求隨時(shí)都有一個(gè)合適的版本部署在生產(chǎn)環(huán)節(jié)上,頻繁發(fā)布、快速部署、快速驗(yàn)證,所以必須要持續(xù)交付。
持續(xù)交付出現(xiàn)的情況是需求遲遲不能確定從而縮短了開發(fā)時(shí)間,需求不能確定所帶來的問題是在確定的過程中整個(gè)市場(chǎng)或用戶已經(jīng)發(fā)生了變化,開發(fā)出來的內(nèi)容早已不符合當(dāng)下用戶的需求了。為了快速的驗(yàn)證需求,往往在生產(chǎn)環(huán)境上會(huì)部署多個(gè)版本,從而也產(chǎn)生了不同的發(fā)布部署方式,比如灰度發(fā)布、藍(lán)綠發(fā)布。
所謂灰度發(fā)布便是當(dāng)新的需求開發(fā)完成后,將線上的版本只升級(jí)部分服務(wù),讓一部分用戶繼續(xù)使用老版本,一部分使用新版本,如果用戶對(duì)新版本沒有意見,再遷移到新版本來,整個(gè)過程是運(yùn)維人員從負(fù)載均衡上去掉灰度服務(wù)器,待服務(wù)升級(jí)成功后再加入負(fù)載均衡服務(wù)器列表,這時(shí)候有少量用戶訪問業(yè)務(wù)時(shí)流量到新版本,如果這小部分用戶使用沒有反對(duì),逐漸擴(kuò)大灰度范圍,最后升級(jí)剩余服務(wù)器。
所謂藍(lán)綠發(fā)布則是將應(yīng)用從邏輯上分為A、B兩組,升級(jí)時(shí)將A從負(fù)載均衡組里刪除,進(jìn)行新版本的部署,同時(shí)B組仍然繼續(xù)提供服務(wù)。當(dāng)A組升級(jí)完成后,負(fù)載均衡重新接入A組,再把B組從負(fù)載列表摘除,進(jìn)行新版本的部署。A組重新提供服務(wù)。最后B組升級(jí)完成,負(fù)載均衡重新接入B組。此時(shí)AB組版本都升級(jí)完成,并且都對(duì)外提供服務(wù)。保障整個(gè)過程對(duì)用戶無影響,出現(xiàn)問題及時(shí)回退上一個(gè)版本。
通過灰度發(fā)布和藍(lán)綠發(fā)布的方式,可以快速的驗(yàn)證用戶需求,頻繁的發(fā)布,根據(jù)用戶情況規(guī)劃產(chǎn)品演變方向,實(shí)現(xiàn)了云計(jì)算時(shí)代的快速迭代,符合云計(jì)算時(shí)代的特色,確定是云原生的特性之三了。
容器技術(shù)的定義就是一個(gè)單獨(dú)的應(yīng)用程序進(jìn)程、運(yùn)行資源的高度隔離。早期的時(shí)候應(yīng)用全運(yùn)行在物理機(jī)上,這導(dǎo)致資源分配不均勻,即使是一個(gè)小的應(yīng)用也要耗費(fèi)同樣的計(jì)算存儲(chǔ)資源,中期的時(shí)候有了虛擬化技術(shù)將物理機(jī)劃分為多個(gè)虛擬機(jī),這樣在一臺(tái)物理服務(wù)器上可以運(yùn)行多個(gè)虛擬服務(wù)器,實(shí)現(xiàn)了資源利用率的較大提升,而云計(jì)算時(shí)代的到來,帶來了微服務(wù)、DevOps、持續(xù)集成持續(xù)交付等內(nèi)容,要求應(yīng)用要原子化、快速的開發(fā)迭代、快速的上線部署,劃分為虛擬機(jī)的方式不能保障應(yīng)用在每個(gè)環(huán)境(Dev、Test、Pre、Prod)都一致,容易引起應(yīng)用因環(huán)境的問題而產(chǎn)生Bug,容器的出現(xiàn)極好的解決了這個(gè)問題。
在容器出現(xiàn)之后,整個(gè)的流程變成了研發(fā)人員在將代碼開發(fā)完成后,會(huì)將代碼、相關(guān)運(yùn)行環(huán)境構(gòu)建鏡像,測(cè)試人員在宿主機(jī)上下載服務(wù)的鏡像,使用容器啟動(dòng)鏡像后即可運(yùn)行服務(wù)進(jìn)行測(cè)試;測(cè)試無誤后運(yùn)維人員申請(qǐng)機(jī)器,拉取服務(wù)器的鏡像,在一臺(tái)或多臺(tái)宿主機(jī)上可以同時(shí)運(yùn)行多個(gè)容器,對(duì)用戶提供服務(wù)。在這個(gè)過程中每個(gè)服務(wù)都在獨(dú)立的容器里運(yùn)行,每臺(tái)機(jī)器上都運(yùn)行著相互不關(guān)聯(lián)的容器,所有容器共享宿主機(jī)的cpu、磁盤、網(wǎng)絡(luò)、內(nèi)存等,即實(shí)現(xiàn)了進(jìn)程隔離(每個(gè)服務(wù)獨(dú)立運(yùn)行)、文件系統(tǒng)隔離(容器目錄修改不影響主機(jī)目錄)、資源隔離(CPU內(nèi)存磁盤網(wǎng)絡(luò)資源獨(dú)立)。
使用容器,研發(fā)團(tuán)隊(duì)可以將微服務(wù)及其所需的所有配置、依賴關(guān)系和環(huán)境變量移動(dòng)到全新的服務(wù)器節(jié)點(diǎn)上,而無需重新配置環(huán)境,這樣就實(shí)現(xiàn)了強(qiáng)大的可移植性,實(shí)現(xiàn)了云計(jì)算時(shí)代的資源最大化利用,符合云計(jì)算時(shí)代的特色,確定是云原生的特性之四了。
綜上所述,云原生的DevOps、容器化平臺(tái)、持續(xù)交付、微服務(wù)都是云原生不可缺少的一部分,而云原生也必然是云計(jì)算發(fā)展的必定趨勢(shì),我們需要以全局地眼光看待問題,對(duì)四個(gè)核心元素加以整合后才能見到云原生的全局風(fēng)貌。