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