一文帶你瞭解雲原生

自進入雲計算時代後,大量的新概念、新技術如雨後春筍般的湧現出來,從早期的openstack、IAAS平臺,到中期的容器技術、微服務架構,再到現在的servicemesh服務網格技術、serverless無服務器架構、雲原生技術,可謂在雲計算的時代,我們從未停下前進的步伐。而今天要給大家帶來的便是雲原生技術~

那麼什麼是雲原生呢?我們將名詞拆成兩部分—雲、原生,這些是相對於本地應用來的,雲是相對於本地而言的,傳統的應用都是運行在本地機房的服務器上,而云的應用則是運行在雲端(如IAAS、PAAS、SAAS)。

原生就是親生的、土生土長的意思,即應用一誕生就是基於雲的,可以直接在雲平臺上運行或非常輕鬆的遷移到雲平臺。

我們可以這麼來定義雲原生:一套新的技術體系、一種新的工作方法論、雲計算髮生的必然導向。

雲原生應用要運行在雲平臺,那麼就必須要有云的特點,比如彈性伸縮、分佈式、快速部署、快速迭代、高效、持續。這可不止是簡單的把原先在物理服務器上的應用遷移到虛擬機裏,不止是基礎設施和運行平臺在雲上,應用架構、應用開發方式、應用部署方式、應用維護方式全都要做出改變。

雲原生的四大核心要素便是微服務技術、DevOps、持續交付、容器化。

  • 微服務技術使得應用原子化,所有的應用都可以獨立的部署、迭代。
  • DevOps使得應用可以快速編譯、自動化測試、部署、發佈、回滾,讓開發和運維一體化。
  • 持續交付讓應用可以頻繁發佈、快速交付、快速反饋、降低發佈風險。
  • 容器使得應用整體開發以容器爲基礎,形成代碼組件複用、資源隔離。接下來我們就好好的侃侃這幾門技術~

 

微服務

微服務的定義是獨立部署的、原子的、自治的業務組件,業務組件彼此之間通過消息中間件進行交互,業務組件可以按需獨立伸縮、容錯、故障恢復。

微服務架構的演變可從早期的單體式架構、中期的SOA架構、後期的微服務架構來看。客戶提出一個需求時,早期的做法是直接往現有的代碼包里加東西,客戶來一個需求,程序員們就寫一串代碼在裏面,來十個寫十串,來一百個寫100串,反正就是不斷的加,最後我們的應用就變成了一個巨無霸應用,要往裏面再加東西很難,要保證全面測試無誤很難,要保證按期上線很難,要保證線上出現了問題快速解決也很難,因爲牽一髮而動全身,即使是技術精湛的程序員也不敢輕易的下手做了。

新的解決方案是SOA架構(ServiceOrientedArchitecture面向服務的架構),即將業務服務化、抽象化,將整個業務拆分成不同的服務,服務與服務之間通過相互依賴提供一系列的功能,通過網絡調用。常用的實現方式是使用ESB(EnterpriseServiceBus企業服務總線)來把各個服務節點,集成不同系統、不同協議的服務,通過ESB將消息進行轉化,實現不同的服務互相交互。這個方案很大程度上解決了巨無霸應用的問題,但是對於ESB的維護成本卻比較高。

 

雲計算時代的到來推動應用“高內聚,低耦合”,高內聚就是熟悉同一塊業務的人、提供用一個服務的模塊聚合在一起,低耦合就是應用與應用之間沒有緊密強依賴關係,而高內聚低耦合的最佳實踐便是微服務架構。通過將服務拆分成單獨的服務,小型團隊可專注於自己的功能開發上線,運維團隊也可根據服務的調用情況彈性擴縮容,符合雲計算時代的特色,確定是雲原生的特性之一了。

 

DevOps

DevOps的定義是研發運維一體化,通過自動化流程使得軟件過程更加快捷和可靠。它不是一個產品,而是一種新的團隊工作方式、新的技術理念。

一個軟件從0到1的最終交付包含如下階段:市場規劃、產品規劃、編碼設計、編譯構建、部署測試、發佈上線、後期維護。

早期的時候全由一個人完成了,這個人一般都是CEO了,他根據對市場的洞察感知有了好的idea,自己開發編碼,編譯打包,進行測試之後在雲廠商上買一兩臺服務器部署上應用就對外發布了,這就是瀑布式開發模型,確認好需求後就進入開發階段,直到完成上線。

而隨着使用人羣的增加,應用的整體維護開始變得艱難,因爲CEO對外要去擴展業務、對內要繼續開發、繼續維護應用,一個人實在幹不過來了。

慢慢的團隊裏有了產品經理、開發人員、測試人員、運維人員的劃分,由產品經理負責需求的規劃、產品交互設計,研發人員負責編碼、構建包,測試人員負責功能測試和自動化測試、上線發佈,運維人員負責維護線上服務的正常運行、擴容縮容,這就是敏捷開發模型,在開發過程階段測試介入,快速驗證修改問題直到基本無誤後上線部署。這一切所帶來的問題是整體的交付週期變長了,團隊之間溝通合作成本變高了,因此DevOps應運而生。它將整個軟件開發測試運維過程變爲一體化,每完成一個小的需求點便測試上線部署,快速驗證需求,捕獲用戶,佔領市場。

 

 

因此DevOps的出現是一種組織架構的變革,一種開發模式的變化,團隊人員在需求規劃、代碼設計、編譯構建、測試部署、上線發佈、後期維護的過程全程參與,每個人都對整體的方案瞭解清晰,可制定合適的系統架構、技術架構、運維部署方案。

 

雲計算時代的到來帶來了虛擬化、容器、微服務等新的技術理念,強調的是服務的拆分、精細化的分工,奠定了DevOps落地的基礎條件,只有當服務拆分的原子化了,整個團隊密切合作的成本纔會降低,才能實現雲上應用的快速迭代,符合雲計算時代的特色,確定是雲原生的特性之二了。

 

持續交付

持續交付的定義就是一直在交付,敏捷開發和DevOps要求隨時都有一個合適的版本部署在生產環節上,頻繁發佈、快速部署、快速驗證,所以必須要持續交付。

持續交付出現的情況是需求遲遲不能確定從而縮短了開發時間,需求不能確定所帶來的問題是在確定的過程中整個市場或用戶已經發生了變化,開發出來的內容早已不符合當下用戶的需求了。爲了快速的驗證需求,往往在生產環境上會部署多個版本,從而也產生了不同的發佈部署方式,比如灰度發佈、藍綠髮布。

所謂灰度發佈便是當新的需求開發完成後,將線上的版本只升級部分服務,讓一部分用戶繼續使用老版本,一部分使用新版本,如果用戶對新版本沒有意見,再遷移到新版本來,整個過程是運維人員從負載均衡上去掉灰度服務器,待服務升級成功後再加入負載均衡服務器列表,這時候有少量用戶訪問業務時流量到新版本,如果這小部分用戶使用沒有反對,逐漸擴大灰度範圍,最後升級剩餘服務器。

 

所謂藍綠髮布則是將應用從邏輯上分爲A、B兩組,升級時將A從負載均衡組裏刪除,進行新版本的部署,同時B組仍然繼續提供服務。當A組升級完成後,負載均衡重新接入A組,再把B組從負載列表摘除,進行新版本的部署。A組重新提供服務。最後B組升級完成,負載均衡重新接入B組。此時AB組版本都升級完成,並且都對外提供服務。保障整個過程對用戶無影響,出現問題及時回退上一個版本。

 

通過灰度發佈和藍綠髮布的方式,可以快速的驗證用戶需求,頻繁的發佈,根據用戶情況規劃產品演變方向,實現了雲計算時代的快速迭代,符合雲計算時代的特色,確定是雲原生的特性之三了。

 

容器化

容器技術的定義就是一個單獨的應用程序進程、運行資源的高度隔離。早期的時候應用全運行在物理機上,這導致資源分配不均勻,即使是一個小的應用也要耗費同樣的計算存儲資源,中期的時候有了虛擬化技術將物理機劃分爲多個虛擬機,這樣在一臺物理服務器上可以運行多個虛擬服務器,實現了資源利用率的較大提升,而云計算時代的到來,帶來了微服務、DevOps、持續集成持續交付等內容,要求應用要原子化、快速的開發迭代、快速的上線部署,劃分爲虛擬機的方式不能保障應用在每個環境(Dev、Test、Pre、Prod)都一致,容易引起應用因環境的問題而產生Bug,容器的出現極好的解決了這個問題。

在容器出現之後,整個的流程變成了研發人員在將代碼開發完成後,會將代碼、相關運行環境構建鏡像,測試人員在宿主機上下載服務的鏡像,使用容器啓動鏡像後即可運行服務進行測試;測試無誤後運維人員申請機器,拉取服務器的鏡像,在一臺或多臺宿主機上可以同時運行多個容器,對用戶提供服務。在這個過程中每個服務都在獨立的容器裏運行,每臺機器上都運行着相互不關聯的容器,所有容器共享宿主機的cpu、磁盤、網絡、內存等,即實現了進程隔離(每個服務獨立運行)、文件系統隔離(容器目錄修改不影響主機目錄)、資源隔離(CPU內存磁盤網絡資源獨立)。

使用容器,研發團隊可以將微服務及其所需的所有配置、依賴關係和環境變量移動到全新的服務器節點上,而無需重新配置環境,這樣就實現了強大的可移植性,實現了雲計算時代的資源最大化利用,符合雲計算時代的特色,確定是雲原生的特性之四了。

 

 

綜上所述,雲原生的DevOps、容器化平臺、持續交付、微服務都是雲原生不可缺少的一部分,而云原生也必然是雲計算髮展的必定趨勢,我們需要以全局的眼光看待問題,對四個核心元素加以整合後才能見到雲原生的全局風貌。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章