什麼是雲原生?


雲原生(Cloud Native)是最近技術圈一個比較火的名詞,相信大家或多或少都聽說過。不過對於大多數普通研發朋友來說,"雲原生"這個詞多少可能還是有些陌生,以至於剛開始聽到這個詞時可能還會一臉懵逼的問"這到底是一個什麼技術,我用過嗎?"這樣的問題。

其實這並不奇怪,因爲對於絕大多數普通開發者來說,我們大部分時間都是在別人構建的基礎設施裏專注於業務代碼的開發,而很少關心業務應用運行所依賴的基礎設施環境,但這恰恰也是構建雲原生應用的核心意義所在。在今天的文章中,就和大家聊一聊關於雲原生的話題!

雲原生的概念


什麼是雲原生?對於這個問題我們需要理解,雲原生並不是指某一項具體的技術,而是一組技術體系、概念及系統設計原則的集合。例如我們常討論的微服務架構、Kubernetes容器編排、Devops等內容都是雲原生體系的組成部分。

從這個角度看,對於目前已經實現了雲服務部署、Spring Cloud微服務架構體系、Kubernetes容器化部署、且構建起了一套自動化發佈系統的公司來說,事實上就已經是在踐行雲原生架構理念了。所以,你看是不是很多公司其實都已經在實施雲原生架構了呢?

根據CNCF(雲原生計算基金會)的官方描述,雲原生技術是指有利於在公有云、私有云或混合雲等新型動態環境下,實現應用可彈性伸縮部署的技術體系。雲原生的代表技術主要包括容器、服務網格、微服務、不可變基礎設施及聲明式API。利用這些技術可以構建出容錯性更好、更易於管理和觀察的鬆耦合系統,再加上一些可靠的自動化技術及完備的監控預警體系,雲原生技術將使開發人員能更快速、輕鬆地迭代和交付軟件系統。

所以從上述描述看,雲原生技術實際上並不是突然才流行起來的概念,而是隨着雲計算微服務架構、服務網格等分佈式應用架構技術普及流行,以及在以Docker、Kubernetes爲代表的容器化技術的推動下,逐步被業界所認可的一種系統架構理念及設計原則的抽象總結。

雲原生技術圖譜


這裏我總結了一份關於雲原生架構的技術圖譜供大家參考,如下圖所示:

如上圖所示,你會發現所謂的雲原生簡直就是一個技術大雜燴,它幾乎囊括目前大部分流行的後端技術,甚至還延伸到了AI、機器學習、邊緣計算等領域。但從實際應用場景來說雲原生架構主要特徵還是體現在雲端環境、微服務架構、服務網格、Devops自動化交付、容器化部署這幾個方面。

雲端環境就是要使用雲服務器,對於大部分公司來說就是使用阿里雲、騰訊雲之類的公有云服務來部署應用,而不是自己在額外維護一套複雜服務器機房。這樣做的好處就在於利用雲服務的彈性及分佈式優勢,可以大大降低運維成本,並且提升服務的穩定性。

而面向微服務的架構,能將原先耦合度高的單體系統,在遵循軟件「高內聚、低耦合」設計原則的前提下,以獨立業務能力爲邊界拆分爲一個個原子系統。這樣做的好處是,每個子系統都可以獨立交付部署,從而能實現更敏捷的軟件迭代效果。目前以Spring Cloud爲代表的微服務技術,幾乎已成爲事實上的軟件構建標準;而以Istio、Linkerd爲代表的下一代服務網格技術也在快速發展,這一切都爲雲原生架構理念的普及作了有效地鋪墊。

關於Devops,它強調的是以開發運維的視角,去構建一套高效完備的CI/CD流程,並通過自動化構建工具及發佈系統,來實現軟件生命週期的管理。從而使得普通開發人員,能夠更快、更頻繁地交付更加穩定的軟件代碼。例如我在本專欄發表的<<Kubernetes微服務自動化發佈系統>>實際上就是一種Devops思想的具體實踐案例,剛興趣的朋友可以參考下。

此外基於Kubernetes的容器化編排技術,已經事實上成爲微服務運行的標準基礎架構環境,也正是Kubernetes的流行,才真正推動了雲原生架構理念的普及,Kubernetes可以說就是雲原生架構的核心承載平臺。關於Kubernetes的基本原理及具體實踐本專欄也有一些文章可供參考,感興趣的朋友可以閱讀下。

總結


以上內容給大家大致介紹了下雲原生的概念,並總結了目前雲原生所涉及的主流技術棧圖譜。從宏觀上看雲原生架構是一個非常龐大的體系,它幾乎能包含目前軟件後端技術領域的方方面面,但從細節上看它卻又是我們現階段工作中都多少能接觸到的技術,例如Spring Cloud微服務、服務熔斷限流、Kubernetes容器編排等等。

所以從某種程度上講,雲原生是一個抽象又具體的存在。它不是一個具體的產品,而是一套技術體系和一套方法論,隨着圍繞着雲原生架構的各類開源技術的進一步發展,雲原生技術體系必將成爲主流,進而影響到每一個技術人員、每一個企業和行業。

以上就是想和大家分享的全部內容,希望對大家有所幫助!

—————END—————

參考資料:

https://jimmysong.io/awesome-cloud-native

https://landscape.cncf.io/

https://jimmysong.io/awesome-cloud-native/#tracing