這兩年,云原生的火熱程度一點(diǎn)都不亞于2014年的3D打印、2018年的區(qū)塊鏈,有種“忽如一夜春風(fēng)來(lái),千樹(shù)萬(wàn)樹(shù)梨花開(kāi)”的既視感。為此,筆者想借著這股“東風(fēng)”,來(lái)談一談云原生。由于云原生概念并沒(méi)有明確,筆者理解可能有失偏頗,行文中若有偏差,敬請(qǐng)各位斧正。
其實(shí),云原生的英文全稱為“CloudNative”,可以將這個(gè)單詞拆分為Cloud、Native兩個(gè)單詞:Cloud意即云,表示應(yīng)用程序在云上,不是在傳統(tǒng)的數(shù)據(jù)中心、服務(wù)器;Native意即原生的、土著的、當(dāng)?shù)氐?、土生土長(zhǎng),表示應(yīng)用程序?qū)iT為云環(huán)境設(shè)計(jì)??梢韵胂?,“云原生”的漢語(yǔ)名稱并沒(méi)有采用云土著、云當(dāng)?shù)?、云土生土長(zhǎng),而采用了一個(gè)非常優(yōu)美的名字——云原生。
因此,云原生一種構(gòu)建和運(yùn)行應(yīng)用程序的技術(shù)體系和方法論,這套技術(shù)體系從設(shè)計(jì)之初即考慮到云的環(huán)境,充分利用和發(fā)揮云平臺(tái)的彈性和分布式優(yōu)勢(shì)。華為曾對(duì)符合云原生架構(gòu)的應(yīng)用程序如是描述:采用開(kāi)源堆棧(K8S+Docker)進(jìn)行容器化,基于微服務(wù)架構(gòu)提高靈活性和可維護(hù)性,借助敏捷方法、DevOps支持持續(xù)迭代和運(yùn)維自動(dòng)化,利用云平臺(tái)設(shè)施實(shí)現(xiàn)彈性伸縮、動(dòng)態(tài)調(diào)度、優(yōu)化資源利用率。?
通過(guò)華為的這段描述,可以看出云原生的四個(gè)要素:容器化、微服務(wù)、DevOps、持續(xù)交付,這是現(xiàn)在公認(rèn)的,也是Pivotal概括的4個(gè)主要要素,對(duì)此,不同的云計(jì)算廠商在原有的4要素之上有所延伸,有著自己的見(jiàn)解。
2013年,Pivotal公司的Matt?Stine首次提出云原生(CloudNative)概念。
2015年,《遷移到云原生架構(gòu)》定義了云原生架構(gòu)的特征:12因素、微服務(wù)、自敏捷架構(gòu)、基于API協(xié)作、扛脆弱性。
同年,云原生計(jì)算基金會(huì)(CNCF)成立,并將云計(jì)算定義為容器化封裝+自動(dòng)化管理+面向微服務(wù)。
2017年,Matt?Stine將云原生架構(gòu)歸納為模塊化、可觀察、可部署、可測(cè)試、可替換、可處理6特質(zhì)。
彼時(shí),Pivotal將云原生概括為DevOps+持續(xù)交付+微服務(wù)+容器。
2018年,CNCF更新了云原生的定義,將服務(wù)網(wǎng)格(Service?Mesh)和聲明式API加進(jìn)來(lái)。
從云原生誕生到發(fā)展的脈絡(luò)來(lái)看,云原生的定義不斷完善,并存在概念混亂、不統(tǒng)一的現(xiàn)狀,不過(guò)目前,大多數(shù)云計(jì)算企業(yè)習(xí)慣使用DevOps+持續(xù)交付+微服務(wù)+容器來(lái)定義云原生。下面,我們來(lái)簡(jiǎn)單理解一下云原生的4個(gè)主要要素。
1、微服務(wù)。
微服務(wù)是一個(gè)獨(dú)立發(fā)布的應(yīng)用服務(wù),可以作為獨(dú)立組件升級(jí)、灰度或復(fù)用等,每個(gè)服務(wù)可以由專門的組織來(lái)單獨(dú)完成,依賴方只要定好輸入和輸出口即可完全開(kāi)發(fā),甚至整個(gè)團(tuán)隊(duì)的組織架構(gòu)更精簡(jiǎn),溝通成本低、效率高。
2、devOps
DevOps字面上是組合詞——Dev、Ops,即開(kāi)發(fā)人員、運(yùn)維人員。實(shí)際上,DevOps是一組過(guò)程、方法與系統(tǒng)的統(tǒng)稱,DevOps強(qiáng)調(diào)高效組織團(tuán)隊(duì)之間如何通過(guò)自動(dòng)化的工具協(xié)作和溝通來(lái)完成軟件的聲明周期管理,從而更快、更頻繁地交付更穩(wěn)定的軟件。?
3、持續(xù)交付
敏捷開(kāi)發(fā)要求持續(xù)交付,因?yàn)槊艚蓍_(kāi)發(fā)要求隨時(shí)有一個(gè)版本可以上到大群環(huán)境,所以要持續(xù)交付。持續(xù)交付目的的快速應(yīng)對(duì)客戶的需求變化,要求發(fā)布非常頻繁,所以會(huì)存在多個(gè)版本同時(shí)提供服務(wù)的情況,因此需要支持灰度發(fā)布/金絲雀發(fā)布等。
4、容器化
Docker是軟件行業(yè)最受歡迎的軟件容器項(xiàng)目,Docker起到應(yīng)用隔離作用,為微服務(wù)及其所需的所有配置、依賴關(guān)系和環(huán)境變量移動(dòng)到全新、無(wú)差別的運(yùn)行環(huán)境,移植性強(qiáng)。但是docker對(duì)于分布式應(yīng)用的部署和編排沒(méi)有考慮,在網(wǎng)絡(luò)和存儲(chǔ)方式都沒(méi)有提出比較好的方式,包括docker-compose。
此外,與原生與本地部署有著什么樣的區(qū)別?
1、編程語(yǔ)言。
據(jù)悉,本地部署的傳統(tǒng)應(yīng)用采用C/C++、企業(yè)級(jí)java編寫(xiě);云原生應(yīng)用需要用以網(wǎng)絡(luò)為中心的go、node.js等新興語(yǔ)言編寫(xiě)。
2、持續(xù)交付
本地部署的傳統(tǒng)應(yīng)用需要停機(jī)更新;云原生應(yīng)用應(yīng)該始終是最新的,需要支持頻繁變更,持續(xù)交付,藍(lán)綠部署。
3、動(dòng)彈擴(kuò)展
本地部署的傳統(tǒng)應(yīng)用無(wú)法動(dòng)態(tài)擴(kuò)展,往往需要冗余資源以抵抗流量高峰,而云原生應(yīng)用利用云的彈性自動(dòng)伸縮,通過(guò)共享降本增效。
4、網(wǎng)絡(luò)限制
本地部署的傳統(tǒng)應(yīng)用對(duì)網(wǎng)絡(luò)資源,比如ip、端口等有依賴,甚至是硬編碼,而云原生應(yīng)用對(duì)網(wǎng)絡(luò)和存儲(chǔ)都沒(méi)有這種限制。
5、自動(dòng)化
本地部署的傳統(tǒng)應(yīng)用通常人肉部署手工運(yùn)維,而云原生應(yīng)用這一切都是自動(dòng)化的。
6、移植性
本地部署的傳統(tǒng)應(yīng)用通常依賴系統(tǒng)環(huán)境,而云原生應(yīng)用不會(huì)硬連接到任何系統(tǒng)環(huán)境,而是依賴抽象的基礎(chǔ)架構(gòu),從而獲得良好移植性。
7、服務(wù)架構(gòu)
本地部署的傳統(tǒng)應(yīng)用有些是單體(巨石)應(yīng)用,或者強(qiáng)依賴,而基于微服務(wù)架構(gòu)的云原生應(yīng)用,縱向劃分服務(wù),模塊化更合理。
責(zé)任編輯:pj
-
數(shù)據(jù)中心
+關(guān)注
關(guān)注
16文章
4633瀏覽量
71903 -
3D打印
+關(guān)注
關(guān)注
26文章
3535瀏覽量
108756 -
云原生
+關(guān)注
關(guān)注
0文章
240瀏覽量
7932
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論