我們?yōu)槭裁葱枰圃?/h1>

原標(biāo)題:我們?yōu)槭裁葱枰圃?/p>

在著名的《集裝箱改變世界》當(dāng)中,我們能看到集裝箱的發(fā)明對于二十世紀(jì)全球化的巨大推動作用。集裝箱,這一看起來并無多少技術(shù)含量的發(fā)明,卻因為進(jìn)行標(biāo)準(zhǔn)化和系統(tǒng)化運輸?shù)膭?chuàng)新徹底改變了全球的貨物貿(mào)易體系。

如今在IT領(lǐng)域,云計算的出現(xiàn)和發(fā)展相當(dāng)于一次數(shù)字世界的“全球化”大發(fā)現(xiàn),而云原生就相當(dāng)于一次“集裝箱式”的創(chuàng)新變革。

如果把互聯(lián)網(wǎng)看作是數(shù)字世界里的貿(mào)易航線,那么應(yīng)用軟件和其中的數(shù)據(jù)就是穿行在航線上的船只和貨物。在傳統(tǒng)的IT架構(gòu)當(dāng)中,最小的貨運單位就是船只(單體應(yīng)用),不同的企業(yè)都有自家的船只,因此每個船只上都要配備全套的IT基礎(chǔ)設(shè)施(計算、存儲、網(wǎng)絡(luò)等),船只要根據(jù)業(yè)務(wù)軟件的規(guī)模提前規(guī)劃,如果遇到業(yè)務(wù)增長,就只能在船上增補硬件設(shè)備,但業(yè)務(wù)下降,這些設(shè)備也只能閑置吃灰。

而云計算的出現(xiàn),相當(dāng)于是成立了幾家大型貨運公司,推出了一些超大型的標(biāo)準(zhǔn)化船只,其他企業(yè)可以選擇把一部分貨物交給這些貨運公司去托運,甚至直接租用貨運公司的船只去運貨,這就涉及到云計算幾種不同的服務(wù)提供方式。

伴隨著云計算這種“集中式貨運”的出現(xiàn),一種適應(yīng)云計算架構(gòu)特點的應(yīng)用開發(fā)技術(shù)和運維管理方式也出現(xiàn)了,那就是云原生。云原生的一個核心技術(shù)就是容器(Container),而容器的創(chuàng)新之處就非常類似于集裝箱的創(chuàng)新。正如物理世界貨運的最小單元從船只變成了集裝箱,在云計算中,軟件的最小單元不再是主機(jī)箱或者虛擬機(jī),而是一個個容器。

正是隨著云計算服務(wù)和容器化技術(shù)的發(fā)展下,越來越多的軟件開發(fā)者和IT運維管理人員開始改變過去獨立開發(fā)運行的傳統(tǒng)模式,從而提出一套基于云計算特點的新的軟件應(yīng)用開發(fā)架構(gòu)和模式,從而誕生了云原生的概念。

云有“原生”初長成

提及云原生,就必然要提到云計算。眾所周知,按照云計算的服務(wù)提供方式,可以分為基礎(chǔ)設(shè)施即服務(wù)(IaaS)、平臺即服務(wù)(PaaS)、軟件即服務(wù)(SaaS)三層。從IaaS到PaaS,再到SaaS,意味著云平臺提供的工具和服務(wù)越來越多,購買云服務(wù)的企業(yè)所要做的開發(fā)相關(guān)的任務(wù)就越來越少,這一趨勢為云原生的出現(xiàn)提供了技術(shù)基礎(chǔ)和方向指引。

(來源:CNCF基金會)

企業(yè)業(yè)務(wù)要想真正的云化,不僅要在基礎(chǔ)設(shè)施和平臺層面實現(xiàn),而且應(yīng)用本身也應(yīng)該基于云的特點進(jìn)行開發(fā),從架構(gòu)設(shè)計、開發(fā)方式、部署維護(hù)等各個階段和方面重新設(shè)計,構(gòu)建真正應(yīng)“云”而生的“云原生應(yīng)用”。

根據(jù)行業(yè)內(nèi)的說法,云原生(Cloud-Native)概念的提出有幾個版本,公認(rèn)的是由Pivotal公司CTO Matt Stine在2013年首次提出。當(dāng)然,這一概念被提出來是沒有定義的,只是一系列技術(shù)的集合。

比如在2010年,WSO2公司CTO Paul Fremantle在博客里也提到“Cloud Native”的概念,不過他給出的相關(guān)解釋包含了分布式、多租戶、按需收費、彈性可伸縮這些特點,但這些主要是云計算服務(wù)的普遍特性,還不夠細(xì)化。

對于云原生概念,Matt Stine在2015年發(fā)表的《遷移到云原生應(yīng)用架構(gòu)》的一書中列舉出以下技術(shù)和特點:十二因素,微服務(wù),子服務(wù)敏捷基礎(chǔ)設(shè)施,基于API的協(xié)作,反脆弱性。

后面,這家公司的另外一位技術(shù)大牛Kevin Hoffman 在《Beyond the 12 factor App》一書,基于原十二要素新增了三個新要素,即云原生十五要素。

對于應(yīng)用開發(fā)領(lǐng)域的從業(yè)者,這些要素想必都非常熟悉,相當(dāng)于是一份SaaS應(yīng)用的最佳實踐標(biāo)準(zhǔn),可以適用于任何語言開發(fā)的后端應(yīng)用服務(wù),將開發(fā)流程自動化和標(biāo)準(zhǔn)化,降低開發(fā)者的學(xué)習(xí)成本。

到2017年,Matt Stine再次將云原生架構(gòu)歸納為模塊化、可觀察、可部署、可測試、可替換、可處理6特質(zhì);而Pivotal官網(wǎng)則給出了云原生的最新定義,概括為4個要點:容器、微服務(wù)、DevOps、持續(xù)交付。

另外一個比較正式的云原生定義是由云原生計算基金會(CNCF)提出的。在2015年,CNCF成立之初,這一組織將云原生定義為包括:容器化封裝、自動化管理、面向微服務(wù);到2018年,CNCF又把服務(wù)網(wǎng)格(Service Mesh)和聲明式API給加到云原生的定義中來。

從云原生的多個定義來看,這一概念在不斷完善和更新,不同組織和企業(yè)對于云原生的側(cè)重點也有所不同。根據(jù)行業(yè)專家的總結(jié),現(xiàn)在我們已經(jīng)能夠看到云原生的一個全貌特征:

(圖源:王銀利《云原生體系下的技海浮沉與理論探索》)

因此,整體來說,云原生是一套在云端構(gòu)建和運行軟件應(yīng)用的方法,可以歸結(jié)為一套技術(shù)方法論?!霸圃钡摹癈loud”,代表了軟件應(yīng)用是放在云端而非傳統(tǒng)的IT設(shè)備中,而“Native”則代表軟件應(yīng)用從一開始設(shè)計,就是根據(jù)云的環(huán)境,采用云端的技術(shù),充分利用云平臺的彈性伸縮和分布式特點,最終在云端高效、穩(wěn)定、安全運行。

從本質(zhì)上來說,云原生是架構(gòu)根植于云,基于云上開發(fā)、部署、維護(hù)的一套技術(shù)方法體系。

點開云原生的“技能樹”

根據(jù)以上云原生概念的共性,我們主要拆解下容器化、微服務(wù)、持續(xù)交付,DevOps這些涉及云技術(shù)和運維管理方法的主要特征。

首先來介紹代表性的容器技術(shù)。最初,一個軟件應(yīng)用都是放在物理主機(jī)上的,管理起來非常不方便,后面出現(xiàn)了虛擬化技術(shù),可以通過服務(wù)器資源共享的方式,按需構(gòu)建應(yīng)用實例,但是虛擬化構(gòu)建出的虛擬機(jī)仍然是一個完整操作系統(tǒng),雖然比物理機(jī)更靈活,但仍然資源浪費的情況。那么,容器技術(shù),就如同IT開發(fā)當(dāng)中的集裝箱,采用更小單元徹底將一個應(yīng)用的資源打包在不同的容器里,從而可以適應(yīng)各種應(yīng)用的運行環(huán)境。

從2004年開始,谷歌就在內(nèi)部大規(guī)模使用Cgroups等的OS虛擬化技術(shù),2008年,谷歌推出的LXC(Linux Container)項目具備了Linux容器的雛型。2013年,Docker橫空出世,讓Linux容器技術(shù)快速席卷開發(fā)界。Docker的成功,也讓構(gòu)建應(yīng)用的最小單元變成了容器,而容器是微服務(wù)的最佳載體。

微服務(wù)就是一種跟單體應(yīng)用相對應(yīng)的新的應(yīng)用架構(gòu),是應(yīng)用服務(wù)單元的小型化和微型化。有個比喻非常貼切,單體應(yīng)用就是一個大茶壺里煮很多餃子,現(xiàn)在變成一個小茶壺里煮一個餃子,但是擁有很多個茶壺。微服務(wù)就是要將應(yīng)用的顆粒度做到最小,使之獨立承擔(dān)對外服務(wù)的職責(zé)。微服務(wù)的理念是隨著軟件系統(tǒng)的復(fù)雜度上升,需要投入的人力和時間資源越來越多,但卻需要及時交付而出現(xiàn)的。

DevOps,是Development+Operations的組合詞,也就是開發(fā)和運維的合體,當(dāng)然也包含測試。DevOps是一種敏捷開發(fā)思維和IT組織的溝通方法,可以促進(jìn)開發(fā)、技術(shù)運營和質(zhì)量保障部門之間的溝通、協(xié)作和整合,從而提高軟件和服務(wù)的交付效率。反映在云原生上面,就是提高持續(xù)交付的能力。

云原生的持續(xù)交付,要做到不誤時開發(fā),不停機(jī)更新,小步快跑,要求開發(fā)版本和穩(wěn)定版本并存,其實需要很多流程和工具支撐。對于廣大用戶來說,現(xiàn)在一個最直觀的感受就是很多巨型應(yīng)用可以做到幾乎在悄無聲息見就完成更新,根本不用再一次次進(jìn)行應(yīng)用的下載和安裝,而這就要歸功于云原生的這些能力。

在軟件開發(fā)領(lǐng)域,曾經(jīng)有一個“不可能三角”的說法,也就是功能復(fù)雜程度、交付周期和可靠性這三者無法同時實現(xiàn),但基于以上云原生的技術(shù)和管理方法,相當(dāng)于解決了這一的一個開發(fā)難題,從而幫助企業(yè)提升應(yīng)用開發(fā)效率,實現(xiàn)業(yè)務(wù)創(chuàng)新。

云原生的能力將造成這樣一個結(jié)果,那就是讓一個應(yīng)用的底座變得越來越復(fù)雜,數(shù)據(jù)處理也越來越自動化,而應(yīng)用的業(yè)務(wù)層面則越來越輕,越來越簡單化。對于大眾用戶來說,就是應(yīng)用的更新、功能的使用越來越便捷和“聰明”。

云原生“江湖”

云原生是順應(yīng)云計算時代的應(yīng)用開發(fā)特點而產(chǎn)生的一種技術(shù)理念,因此在云原生概念一直沒有明確的定義,而只有不同組織的不同的解釋。相伴而生的就是云原生技術(shù)的演化和廠商的紛爭。

現(xiàn)在一提到云原生,基本就會提及Docker和Kubernetes(簡稱K8s)。那么,這兩者到底是怎樣的關(guān)系呢?

簡單來說,Docker是目前最成功的容器工具,K8s是目前最流行的容器編排工具。所謂“編排”,源自音樂指揮家對不同樂器演奏的協(xié)調(diào),那么用在云原生這里,就是對包含應(yīng)用程序的容器的協(xié)同關(guān)系管理。

最初,Google已經(jīng)在容器技術(shù)上有了十多年的積累,只不過,Google的做法是秘而不宣,把基礎(chǔ)設(shè)施的復(fù)雜性都留在內(nèi)部,只給開發(fā)者和用戶提供最簡單的操作工具就行。但是2013年開源容器工具Docker一經(jīng)推出就大受歡迎,很快就成為事實上的容器標(biāo)準(zhǔn),這嚴(yán)重刺激了Google。因此,Google采用了“敵人的敵人就是朋友”的戰(zhàn)略,開始支持與Docker分道揚鑣的CoreOS,推出了K8s項目,并支持CoreOS提出的另一個開源容器引擎Rocket。

2014年,當(dāng)Google發(fā)現(xiàn)CoreOS在容器生態(tài)領(lǐng)域?qū)嵲诓皇荄ocker的對手之后,決定換道超車,于當(dāng)年宣布推出K8s容器集群編排工具,并在2014年6月7日將初始版本代碼提交到Github上完全開源。而此時的Docker公司也雄心勃勃,于年底在DockerCon上發(fā)布了自己研發(fā)的“Docker原生”容器集群管理項目Docker Swarm,并想與K8s一較高下。一場“容器編排”的戰(zhàn)爭打響。

(Kubernetes來自于希臘語,含義是舵手或領(lǐng)航員)

但Kubernetes憑借Google在容器集群管理系統(tǒng)Borg+Omega上的多年技術(shù)積累,很快橫掃Docker Swarm和其他容器編排工具。到2017年6月,據(jù)CNCF統(tǒng)計:K8S占據(jù)著77%的市場份額,到10月,Docker宣布支持K8s,這標(biāo)志著容器編排的戰(zhàn)爭基本結(jié)束,最終以K8s的大獲全勝告終。

Docker被K8s成功收編,那最大的贏家就是2015年成立的云原生計算基金會(CNCF),當(dāng)然還有全球的開發(fā)者。

CNCF是由Google 牽頭成立,隸屬于 Linux 基金會,初衷是圍繞云原生服務(wù)云計算,致力于培育和維護(hù)一個廠商中立的開源生態(tài)系統(tǒng),維護(hù)和集成開源技術(shù),支持編排容器化微服務(wù)架構(gòu)應(yīng)用,通過將最前沿的模式民主化,讓這些創(chuàng)新為大眾所用。

截至2020年4月,CNCF基金會共托管49個云原生項目,其中,Kubernetes是CNCF托管的第一個云原生開源項目?,F(xiàn)在全球主流的科技企業(yè)和云計算廠商絕大部分都是CNCF會員,云廠商們把加入CNCF作為企業(yè)技術(shù)競爭力的宣傳點。

(CNCF全景圖)

可以說,云原生在今天的發(fā)展壯大,確實離不開CNCF這樣的中立組織所發(fā)揮的作用。假如說Docker一家獨大,就很容易提高容器技術(shù)的使用成本,如果K8s不在CNCF開源共享,開發(fā)者又可能要面臨“二選一”的麻煩。

值得注意的是,在2020年12月,K8s宣布棄用Docker,并非是簡單地對Docker的“卸磨殺驢”,而是對于容器編排的進(jìn)一步優(yōu)化。因此,我們可以看到云原生的具體的技術(shù)工具還 演變進(jìn)化當(dāng)中。

到這里,我們應(yīng)該對云原生的前世今生有一個基本的印象。

總的來說,云原生沒有一個固定的概念定義,但卻有一個清晰的邏輯,那就是軟件應(yīng)用正在按照云原生的方式進(jìn)行深度的云化,充分貼合云計算的彈性可擴(kuò)展、敏捷、分布式、自動化的特點,因云而生,又應(yīng)云而行。

同時,云原生體系的技術(shù)也處在不斷的演化發(fā)展當(dāng)中,目前正形成以容器及容器編排、微服務(wù)、敏捷基礎(chǔ)設(shè)施、DevOps、聲明式API等為特點的云原生應(yīng)用的技術(shù)方法論。在這些云原生技術(shù)的演進(jìn)過程中,CNCF及其提供的開源項目和開發(fā)生態(tài)將發(fā)揮更加顯著的作用。

當(dāng)然,盡管我們看到云原生有這樣那樣的好處,但是云原生從誕生到如今的破圈而紅并非是一蹴而就的,云原生本身的演化也經(jīng)歷一個從青澀到成熟的過程。但云原生的計算價值已經(jīng)落地生根,某種程度上成為了企業(yè)IT的大勢所趨,甚至必然選擇。

極客網(wǎng)企業(yè)會員

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實,并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2021-03-19
我們?yōu)槭裁葱枰圃?/div>
正是隨著云計算服務(wù)和容器化技術(shù)的發(fā)展下,越來越多的軟件開發(fā)者和IT運維管理人員開始改變過去獨立開發(fā)運行的傳統(tǒng)模式,從而提出一套基于云計算特點的新的軟件應(yīng)用開發(fā)架構(gòu)和模式,從而誕生了云原生的概念。

長按掃碼 閱讀全文