時(shí)代在召喚云原生

利用云原生應(yīng)用程序開(kāi)發(fā),意味著使用敏捷與可擴(kuò)展的組件,如以Kubernetes為代表的容器來(lái)提供離散和可重用的功能,這些功能以良好描述的方式集成,甚至跨越多云等技術(shù)邊界,這使得交付團(tuán)隊(duì)可以使用重復(fù)的自動(dòng)化和編排來(lái)快速迭代。

我們已經(jīng)進(jìn)入云計(jì)算下半場(chǎng),不再像上半場(chǎng)在糾結(jié)要不要上云,而是討論怎么上云?才能把云計(jì)算的價(jià)值發(fā)揮到淋漓盡致。如何把云計(jì)算與不同的業(yè)務(wù)場(chǎng)景深度結(jié)合?如何讓技術(shù)真正作用于企業(yè)?如何節(jié)省企業(yè)IT部署成本?

誰(shuí)也不知道答案,直到“云原生”來(lái)了。

◆◆云原生是什么◆◆

云原生是什么?這個(gè)眾說(shuō)紛紜,沒(méi)有統(tǒng)一的定義,姑且以老大哥CNCF的定義來(lái)了解云原生。

老大哥?CNCF?

CNCF,全稱為Cloud Native Computing Foundation,中文譯為“云原生計(jì)算基金會(huì)”。成立于2015年12月11日,CNCF是Linux基金會(huì)旗下的基金會(huì)。CNCF致力于培育和維護(hù)一個(gè)廠商中立的開(kāi)源生態(tài)系統(tǒng),來(lái)推廣云原生技術(shù)。CNCF是云原生領(lǐng)域影響力最大最有話語(yǔ)權(quán)的組織。

說(shuō)起CNCF的故事,還要從Cgroups(control groups,控制組群)開(kāi)始說(shuō)起,時(shí)間軸回到16年前。

2004年,谷歌開(kāi)始使用容器技術(shù),于2006年發(fā)布了Cgroups,最初叫Process Container(進(jìn)程容器)。

Process Container的目的非常直白,它希望能夠像虛擬化技術(shù)那樣給進(jìn)程提供操作系統(tǒng)級(jí)別的資源限制、優(yōu)先級(jí)控制、資源審計(jì)能力和進(jìn)程控制能力。帶著這樣的設(shè)計(jì)思路,Process Container在2006年由Google的工程師正式推出后,第二年就進(jìn)入了Linux內(nèi)核主干。

因?yàn)樵贚inux內(nèi)核中,容器(container)這個(gè)名詞有許多不同的意義,為避免混亂,就更名為Control Groups,也就是Cgroups。

2013 年,Docker 項(xiàng)目正式發(fā)布,2014 年,K8s項(xiàng)目也正式發(fā)布。

原因非常容易理解,因?yàn)橛辛巳萜骱?Docker 之后,就需要有一種方式去幫助大家方便、快速、優(yōu)雅地管理這些容器,這就是K8s項(xiàng)目的初衷。

K8s是云原生的基石,后面會(huì)細(xì)講。在 Google 和 Redhat 發(fā)布了K8s 之后,這個(gè)項(xiàng)目的發(fā)展速度非常之快。

2015 年,由Google、Redhat 以及微軟等大型云計(jì)算廠商以及一些開(kāi)源公司共同牽頭成立了 CNCF 云原生基金會(huì)。CNCF成立之初,就有22個(gè)創(chuàng)始會(huì)員,而且K8s也成為了 CNCF 托管的第一個(gè)開(kāi)源項(xiàng)目。

在這之后,CNCF 迅猛發(fā)展。截止2020年2月,從官網(wǎng)看到數(shù)據(jù)顯示有433個(gè)會(huì)員。

那么CNCF是如何定義云原生的呢?

翻譯為中文:

云原生技術(shù)有利于各組織在公有云、私有云和混合云等新型動(dòng)態(tài)環(huán)境中,構(gòu)建和運(yùn)行可彈性擴(kuò)展的應(yīng)用。云原生的代表技術(shù)包括容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式API。

這些技術(shù)能夠構(gòu)建容錯(cuò)性好、易于管理和便于觀察的松耦合系統(tǒng)。結(jié)合可靠的自動(dòng)化手段,云原生技術(shù)使工程師能夠輕松地對(duì)系統(tǒng)作出頻繁和可預(yù)測(cè)的重大變更。

云原生計(jì)算基金會(huì)(CNCF)致力于培育和維護(hù)一個(gè)廠商中立的開(kāi)源生態(tài)系統(tǒng),來(lái)推廣云原生技術(shù)。我們通過(guò)將最前沿的模式民主化,讓這些創(chuàng)新為大眾所用。

除了CNCF關(guān)于云原生的定義,網(wǎng)絡(luò)上流傳的另一個(gè)版本是Pivotal 公司的 Matt Stine于2013年首次提出云原生概念;2015年,云原生剛推廣時(shí),Matt Stine在《遷移到云原生架構(gòu)》一書(shū)中定義了符合云原生架構(gòu)的幾個(gè)特征:12因素、微服務(wù)、自敏捷架構(gòu)、基于API 協(xié)作、扛脆弱性。

到了2017年,Matt Stine 改了口風(fēng),將云原生架構(gòu)歸納為模塊化、可觀察、可部署、可測(cè)試、可替換、可處理6特質(zhì);而Pivotal 官網(wǎng)對(duì)云原生概括為4個(gè)要點(diǎn):DevOps+持續(xù)交付+微服務(wù)+容器。

云原生所需能力與特征 by:CNCF大使 宋凈超

MattStine認(rèn)為云原生它是一個(gè)思想的集合,包括DevOps、持續(xù)交付(Continuous Delivery)、微服務(wù)(MicroServices)、敏捷基礎(chǔ)設(shè)施(Agile Infrastructure)、康威定律(Conways Law)等。

云原生即包含技術(shù)(微服務(wù),敏捷基礎(chǔ)設(shè)施),也包含管理(DevOps,持續(xù)交付,康威定律,重組等)。云原生也可以說(shuō)是一系列云技術(shù)、企業(yè)管理方法的集合。

我們以CNCF官方的定義來(lái)接著了解。云原生的代表技術(shù)包括容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式API。那么這些技術(shù)都是什么?這些技術(shù)有什么聯(lián)系?

◆◆云原生代表技術(shù)◆◆

容器

一般我們說(shuō)的“容器”(LinuxContainer,LXC),都是“Linux容器”(當(dāng)然微軟也在搞容器,但還沒(méi)linux那么成熟)。開(kāi)源解決方案供應(yīng)商紅帽官網(wǎng)給出的容器定義:

Linux? 容器是與系統(tǒng)其他部分隔離開(kāi)的一系列進(jìn)程。運(yùn)行這些進(jìn)程所需的所有文件都由另一個(gè)鏡像提供,這意味著從開(kāi)發(fā)到測(cè)試再到生產(chǎn)的整個(gè)過(guò)程中,Linux 容器都具有可移植性和一致性。因而,相對(duì)于依賴重復(fù)傳統(tǒng)測(cè)試環(huán)境的開(kāi)發(fā)渠道,容器的運(yùn)行速度要快得多。容器比較普遍也易于使用,因此也成了 IT 安全方面的重要組成部分。

容器提供進(jìn)程級(jí)的隔離,可以將操作系統(tǒng)管理的資源劃分到相互隔離的組中,在相互隔離的組之間解決資源使用存在沖突的問(wèn)題。比如應(yīng)用程序(Application,APP )APP 1 只能在centos 操作系統(tǒng)上運(yùn)行,APP2只能在ubuntu操作系統(tǒng)上運(yùn)行,而同一個(gè)操作系統(tǒng)同時(shí)運(yùn)行APP1和APP2就產(chǎn)生沖突,容器技術(shù)則恰恰可以解決這類問(wèn)題。目前主流的容器技術(shù)有Docker、LXD以及RKT等。

Docker

說(shuō)到容器,就不得不說(shuō)Docker。

2010年,幾個(gè)大胡子的年輕人在美國(guó)舊金山成立了一家名叫“dotCloud”的公司。這家公司主要提供基于PaaS的云計(jì)算技術(shù)服務(wù)。具體來(lái)說(shuō),是和LXC有關(guān)的容器技術(shù)。LXC,就是Linux容器虛擬技術(shù)(Linux container)

后來(lái),dotCloud公司將自己的容器技術(shù)進(jìn)行了簡(jiǎn)化和標(biāo)準(zhǔn)化,并命名為——Docker。

Docker項(xiàng)目發(fā)布時(shí),無(wú)非也是LXC的一個(gè)使用者,它創(chuàng)建和使用應(yīng)用容器的邏輯跟Warden等競(jìng)爭(zhēng)對(duì)手沒(méi)有本質(zhì)不同。不過(guò),我們現(xiàn)在也知道,真正讓PaaS項(xiàng)目無(wú)所適從的,是Docker項(xiàng)目最厲害的殺手锏:容器鏡像。

Docker項(xiàng)目通過(guò)容器鏡像,直接將一個(gè)應(yīng)用運(yùn)行所需的完整環(huán)境,即:整個(gè)操作系統(tǒng)的文件系統(tǒng)也打包了進(jìn)去。這種思路,可算是解決了困擾PaaS用戶已久的一致性問(wèn)題,制作一個(gè)“一次發(fā)布、隨處運(yùn)行”的Docker鏡像的意義,一下子就比制作一個(gè)連開(kāi)發(fā)和測(cè)試環(huán)境都無(wú)法統(tǒng)一的Buildpack高明了太多。

Docker項(xiàng)目大大降低了容器技術(shù)的使用門(mén)檻,輕量級(jí),可移植,虛擬化,語(yǔ)言無(wú)關(guān),寫(xiě)了程序扔上去做成鏡像可以隨處部署和運(yùn)行,開(kāi)發(fā)、測(cè)試和生產(chǎn)環(huán)境徹底統(tǒng)一了,還能進(jìn)行資源管控和虛擬化。

Docker作為一種開(kāi)源應(yīng)用容器引擎,是為開(kāi)發(fā)人員和系統(tǒng)管理員設(shè)計(jì)的用于構(gòu)建、發(fā)布和運(yùn)行分布式應(yīng)用的平臺(tái),典型的Docker平臺(tái)Kubernetes、Openshift V3、Flynn、Deis等。

Docker允許開(kāi)發(fā)人員將各種應(yīng)用以及依賴包打包到一個(gè)可移植的Docker容器中,以Docker容器為資源分割和調(diào)度的基本單位,封裝整個(gè)軟件運(yùn)行時(shí)的環(huán)境,然后發(fā)布到Linux機(jī)器上。

Docker設(shè)計(jì)原理如上圖所示。按照Docker的設(shè)計(jì)方案,應(yīng)用軟件的交付過(guò)程如同海上運(yùn)輸,操作系統(tǒng)OS如同一個(gè)貨輪,每一個(gè)在OS基礎(chǔ)上的軟件都如同一個(gè)集裝箱,用戶可以通過(guò)標(biāo)準(zhǔn)化手段自由組裝運(yùn)行環(huán)境,同時(shí)集裝箱的內(nèi)容可以由用戶自定義,也可以由專業(yè)人員(開(kāi)發(fā)人員或系統(tǒng)管理員)定制,如此一來(lái),交付一個(gè)應(yīng)用軟件產(chǎn)品,就相當(dāng)于交付一系列標(biāo)準(zhǔn)化組件的集合。

一句話解釋Docker?

沒(méi)有集裝箱就沒(méi)有全球化,Docker就是IT世界里的集裝箱。

有了容器,就需要編排管理容器的生命周期,kubernetes要了解一下。

Kubernetes

說(shuō)一下kubernetes,kubernetes一度被大家稱為云原生的基石。

K8s,全稱是Kubernetes。這個(gè)單詞來(lái)自于希臘語(yǔ),含義是舵手或領(lǐng)航員。K8s是它的縮寫(xiě),用“8”字替代了“ubernete”這8個(gè)字符。

K8s并不是一件全新的發(fā)明。它是谷歌根據(jù)其內(nèi)部使用的 Borg 改造成的一個(gè)通用容器編排調(diào)度器,于2014年6月開(kāi)源,同年7月,微軟、Red Hat、IBM、Docker等公司,相繼加入K8s。2015年,谷歌將其捐贈(zèng)給 Linux 基金會(huì)下屬的云原生計(jì)算基金會(huì)(CNCF),K8s也成為CNCF第一個(gè)項(xiàng)目。

K8s的架構(gòu),略微有一點(diǎn)復(fù)雜,我們簡(jiǎn)單來(lái)看一下。

一個(gè)K8s系統(tǒng),通常稱為一個(gè)K8s集群(Cluster)。這個(gè)集群主要包括兩個(gè)部分:一個(gè)Master節(jié)點(diǎn)(主節(jié)點(diǎn))和一群Node節(jié)點(diǎn)(計(jì)算節(jié)點(diǎn))。

列舉下一些專用術(shù)語(yǔ)的解釋。

Master(主節(jié)點(diǎn)):控制 K8s 節(jié)點(diǎn)的機(jī)器,也是創(chuàng)建作業(yè)任務(wù)的地方。

Node(節(jié)點(diǎn)):這些機(jī)器在 K8s 主節(jié)點(diǎn)的控制下執(zhí)行被分配的任務(wù)。

Pod:由一個(gè)或多個(gè)容器構(gòu)成的集合,作為一個(gè)整體被部署到一個(gè)單一節(jié)點(diǎn)。同一個(gè) pod 中的容器共享 IP 地址、進(jìn)程間通訊(IPC)、主機(jī)名以及其它資源。Pod 將底層容器的網(wǎng)絡(luò)和存儲(chǔ)抽象出來(lái),使得集群內(nèi)的容器遷移更為便捷。

Replicationcontroller(復(fù)制控制器):控制一個(gè) pod 在集群上運(yùn)行的實(shí)例數(shù)量。

Service(服務(wù)):將服務(wù)內(nèi)容與具體的 pod 分離。Kubernetes服務(wù)代理負(fù)責(zé)自動(dòng)將服務(wù)請(qǐng)求分發(fā)到正確的 pod 處,不管 pod 移動(dòng)到集群中的什么位置,甚至可以被替換掉。

Kubelet:這個(gè)守護(hù)進(jìn)程運(yùn)行在各個(gè)工作節(jié)點(diǎn)上,負(fù)責(zé)獲取容器列表,保證被聲明的容器已經(jīng)啟動(dòng)并且正常運(yùn)行。

kubectl: 這是 Kubernetes 的命令行配置工具。

理解完K8s 部分專業(yè)術(shù)語(yǔ),就大致對(duì)K8s有個(gè)了解了。

云可以為我們提供穩(wěn)定而唾手可得的基礎(chǔ)設(shè)施,但是業(yè)務(wù)上云成了一個(gè)難題,K8s 的出現(xiàn)與其說(shuō)是從最初的容器編排解決方案開(kāi)始,倒不如說(shuō)是為了解決應(yīng)用上云(即云原生應(yīng)用)這個(gè)難題。

CNCF 中托管的一系列項(xiàng)目即致力于云原生應(yīng)用整個(gè)生命周期的管理,從部署平臺(tái)、日志收集、Service Mesh(服務(wù)網(wǎng)格)、服務(wù)發(fā)現(xiàn)、分布式追蹤、監(jiān)控以及安全等各個(gè)領(lǐng)域通過(guò)開(kāi)源軟件為我們提供一整套解決方案。

Google 通過(guò)將云應(yīng)用進(jìn)行抽象簡(jiǎn)化出的 Kubernetes 中的各種概念對(duì)象,如Pod、Deployment、Job、StatefulSet 等,形成了Cloud Native 應(yīng)用的通用可移植的模型,Kubernetes 作為云應(yīng)用的部署標(biāo)準(zhǔn),直接面向業(yè)務(wù)應(yīng)用,大大提高了云應(yīng)用的可移植性,解決云廠商鎖定的問(wèn)題,讓云應(yīng)用可以在夸云之間無(wú)縫遷移,甚至用來(lái)管理混合云,成為企業(yè) IT 云平臺(tái)的新標(biāo)準(zhǔn)。

微服務(wù)

在介紹微服務(wù)時(shí),首先得先理解什么是微服務(wù),顧名思義,微服務(wù)得從兩個(gè)方面去理解,什么是"微"、什么是"服務(wù)",微 狹義來(lái)講就是體積小、著名的 "2 pizza 團(tuán)隊(duì)" 很好的詮釋了這一解釋(2 pizza 團(tuán)隊(duì)最早是亞馬遜 CEO Bezos提出來(lái)的,意思是說(shuō)單個(gè)服務(wù)的設(shè)計(jì),所有參與人從設(shè)計(jì)、開(kāi)發(fā)、測(cè)試、運(yùn)維所有人加起來(lái)只需要2個(gè)披薩就夠了)。

而所謂服務(wù),一定要區(qū)別于系統(tǒng),服務(wù)一個(gè)或者一組相對(duì)較小且獨(dú)立的功能單元,是用戶可以感知最小功能集。

傳統(tǒng)的單體架構(gòu)是以整個(gè)系統(tǒng)為單位進(jìn)行部署,而微服務(wù)則是以每一個(gè)獨(dú)立組件(例如用戶服務(wù),商品服務(wù))為單位進(jìn)行部署。對(duì)于單體應(yīng)用,如果發(fā)現(xiàn)某一業(yè)務(wù)的請(qǐng)求量非常大,那么是無(wú)法單獨(dú)擴(kuò)展該業(yè)務(wù)的,只能拷貝整個(gè)單體應(yīng)用,再部署一套環(huán)境,來(lái)實(shí)現(xiàn)集群。正因?yàn)閱误w應(yīng)用的缺陷,才有了微服務(wù)。

微服務(wù)和單體應(yīng)用的區(qū)別,可以用Martin Fowler的這張圖來(lái)解釋:

圖中左邊是單體架構(gòu)的集群,右邊是微服務(wù)集群。

什么意思呢?比如根據(jù)每個(gè)服務(wù)的吞吐量不同,支付服務(wù)需要部署20臺(tái)機(jī)器,用戶服務(wù)需要部署30臺(tái)機(jī)器,而商品服務(wù)只需要部署10臺(tái)機(jī)器。這種靈活部署只有微服務(wù)架構(gòu)才能實(shí)現(xiàn)。

而近幾年流行的Docker,為微服務(wù)架構(gòu)提供了有效的容器。

服務(wù)網(wǎng)格

服務(wù)網(wǎng)格( Service Mesh )是指用以處理服務(wù)與服務(wù)之間通信的基礎(chǔ)設(shè)施層。其最早由Buoyant公司(開(kāi)發(fā)Service Mesh項(xiàng)目Linkerd的公司)提出,并在內(nèi)部使用。該公司2016年9月29日第一次公開(kāi)使用這個(gè)術(shù)語(yǔ)。

Service Mesh一般用于微服務(wù)應(yīng)用的可配置基礎(chǔ)架構(gòu)層( configurable infrastructure layer )。Istio( 由Google、IBM、Lyft公司在背后進(jìn)行支持 ) 是目前最廣為人知的一款服務(wù)網(wǎng)格架構(gòu)。

Kubernetes(由Google最早進(jìn)行設(shè)計(jì)并開(kāi)源)是目前Istio唯一支持的容器組織框架。

為什么Service Mesh這么受歡迎?對(duì)許多公司來(lái)說(shuō),Docker 和 Kubernetes 這樣的工具已經(jīng) "解決了部署問(wèn)題",或者說(shuō)幾乎解決了。但他們還沒(méi)有解決運(yùn)行時(shí)的問(wèn)題,這就是服務(wù)網(wǎng)格的由來(lái)。

什么是解決了部署問(wèn)題?使用 Docker 和 Kubernetes 等功能可顯著減輕部署的增量操作負(fù)擔(dān)。使用這些工具,部署100個(gè)應(yīng)用或服務(wù)不再是部署單個(gè)應(yīng)用的100倍。這是向前邁出的一大步,對(duì)許多公司來(lái)說(shuō),這導(dǎo)致采用微服務(wù)的成本大幅降低。這不僅是因?yàn)?Docker 和 Kubernetes 所提供了強(qiáng)大的抽象,而且還因?yàn)樗鼈兪拐麄€(gè)組織的打包和部署模式過(guò)程標(biāo)準(zhǔn)化了。

Service Mesh的出現(xiàn),彌補(bǔ)了Kubernetes在微服務(wù)的連接、管理和監(jiān)控方面的短板,為Kubernetes提供更好的應(yīng)用和服務(wù)管理。因此,Service Mesh的代表Istio一經(jīng)推出,就被認(rèn)為是可以和Kubernetes形成雙劍合璧效果的微服務(wù)管理的利器,受到了業(yè)界的推崇。

不可變基礎(chǔ)設(shè)施

在傳統(tǒng)的可變服務(wù)器基礎(chǔ)架構(gòu)中,服務(wù)器會(huì)不斷更新和修改。使用此類基礎(chǔ)架構(gòu)的工程師和管理員可以通過(guò)SSH連接到他們的服務(wù)器,手動(dòng)升級(jí)或降級(jí)軟件包,逐個(gè)服務(wù)器地調(diào)整配置文件,以及將新代碼直接部署到現(xiàn)有服務(wù)器上。換句話說(shuō),這些服務(wù)器是可變的;它們可以在創(chuàng)建后進(jìn)行更改。

可變基礎(chǔ)設(shè)施通常會(huì)導(dǎo)致以下問(wèn)題:

在災(zāi)難發(fā)生的時(shí)候,難以重新構(gòu)建服務(wù)。持續(xù)過(guò)多的手工操作,缺乏記錄,會(huì)導(dǎo)致很難由標(biāo)準(zhǔn)初始化后的服務(wù)器來(lái)重新構(gòu)建起等效的服務(wù)。

在服務(wù)運(yùn)行過(guò)程中,持續(xù)的修改服務(wù)器,就猶如程序中的可變變量的值發(fā)生變化而引入的狀態(tài)不一致的并發(fā)風(fēng)險(xiǎn)。這些對(duì)于服務(wù)器的修改,同樣會(huì)引入中間狀態(tài),從而導(dǎo)致不可預(yù)知的問(wèn)題。

不可變基礎(chǔ)架構(gòu)是另一種基礎(chǔ)架構(gòu)范例,其中服務(wù)器在部署后永遠(yuǎn)不會(huì)被修改。程序設(shè)計(jì)中不可變變量(ImmutableVariable)就是在完成賦值后就不能發(fā)生更改,只能創(chuàng)建新的來(lái)整體替換舊的。由于具有這樣的特性這種變量可以在并發(fā)環(huán)境下安全的使用。對(duì)于基礎(chǔ)設(shè)施的不可變性,最基本的就是指運(yùn)行服務(wù)的服務(wù)器在完成部署后,就不在進(jìn)行更改。

不可變基礎(chǔ)架構(gòu)的好處包括基礎(chǔ)架構(gòu)中更高的一致性和可靠性,以及更簡(jiǎn)單,更可預(yù)測(cè)的部署過(guò)程。

它可以緩解或完全防止可變基礎(chǔ)架構(gòu)中常見(jiàn)的問(wèn)題,例如配置漂移和雪花服務(wù)器。但是,有效地使用它通常包括全面的部署自動(dòng)化,云計(jì)算環(huán)境中的快速服務(wù)器配置,以及處理狀態(tài)或短暫數(shù)據(jù)(如日志)的解決方案。

聲明式API

聲明式(Declarative)的編程方式一直都會(huì)被工程師們拿來(lái)與命令式(Imperative)進(jìn)行對(duì)比,這兩者是完全不同的編程方法。

我們最常接觸的其實(shí)是命令式編程,它要求我們描述為了達(dá)到某一個(gè)效果或者目標(biāo)所需要完成的指令,常見(jiàn)的編程語(yǔ)言 Go、Ruby、C++ 其實(shí)都為開(kāi)發(fā)者了命令式的編程方法,

聲明式和命令式是兩種截然不同的編程方式:

在命令式 API 中,我們可以直接發(fā)出服務(wù)器要執(zhí)行的命令,例如: “運(yùn)行容器”、“停止容器”等;

在聲明式 API 中,我們聲明系統(tǒng)要執(zhí)行的操作,系統(tǒng)將不斷向該狀態(tài)驅(qū)動(dòng)。

通俗的說(shuō),命令式編程是第一人稱,我要做什么,我要怎么做。 操作系統(tǒng)最喜歡這種編程范式了, 操作系統(tǒng)幾乎不用"思考", 只要一對(duì)一的將代碼翻譯成指令就可以了。 而聲明式編程則類似于"第二人稱", 也就是你要做什么。 有點(diǎn)"產(chǎn)品經(jīng)理"和"開(kāi)發(fā)“之間的關(guān)系,"產(chǎn)品經(jīng)理"只負(fù)責(zé)提需求,而"開(kāi)發(fā)"怎么實(shí)現(xiàn)他不并關(guān)心。

讓我們來(lái)總結(jié)一下上面提到的技術(shù)和工具。

k8s是整個(gè)云原生的基石,云原生的整個(gè)生態(tài)體系都是依靠k8s建立起來(lái)的。

容器(Container)是k8s的底層引擎;

Docker是應(yīng)用最廣的容器工具;

微服務(wù)是docker的好搭檔;

服務(wù)網(wǎng)格是微服務(wù)的輔助,建立在k8s上的針對(duì)請(qǐng)求的擴(kuò)展功能;

不可變基礎(chǔ)設(shè)施是現(xiàn)代運(yùn)維的基石;

聲明式API是k8s的編碼方式;

◆◆云原生應(yīng)用價(jià)值◆◆

由于篇幅關(guān)系,簡(jiǎn)單列舉三項(xiàng)云原生應(yīng)用價(jià)值。

1)快速迭代

利用云原生應(yīng)用程序開(kāi)發(fā),意味著使用敏捷與可擴(kuò)展的組件,如以Kubernetes為代表的容器來(lái)提供離散和可重用的功能,這些功能以良好描述的方式集成,甚至跨越多云等技術(shù)邊界,這使得交付團(tuán)隊(duì)可以使用重復(fù)的自動(dòng)化和編排來(lái)快速迭代。

2)自動(dòng)部署

云原生方法遠(yuǎn)優(yōu)于傳統(tǒng)的面向虛擬化的業(yè)務(wù)流程,傳統(tǒng)方法需要投入大量的精力來(lái)構(gòu)建開(kāi)發(fā)環(huán)境,以及軟件交付過(guò)程中的其他不同環(huán)境。而云原生架構(gòu)具備自動(dòng)化和組合功能,并且依賴于可靠、經(jīng)過(guò)驗(yàn)證和審核的已知良好流程的基礎(chǔ),交付十分敏捷,而不再需要人工干預(yù)重復(fù)執(zhí)行。

3)獨(dú)立高效

云原生帶來(lái)了微服務(wù)化架構(gòu),一個(gè)微服務(wù)基本是一個(gè)能獨(dú)立發(fā)布的應(yīng)用服務(wù),因此可以作為獨(dú)立組件升級(jí)、灰度或復(fù)用等,對(duì)整個(gè)大應(yīng)用的影響也較小,每個(gè)服務(wù)可以由專門(mén)的組織來(lái)單獨(dú)完成,依賴方只要定好輸入和輸出口即可完全開(kāi)發(fā)、甚至整個(gè)團(tuán)隊(duì)的組織架構(gòu)也會(huì)更精簡(jiǎn),因此溝通成本低、效率高。

談云原生就要談云計(jì)算,不和云計(jì)算對(duì)比都是耍流氓。云計(jì)算的第一個(gè)浪潮是關(guān)于成本節(jié)約和業(yè)務(wù)敏捷性,尤其是云計(jì)算的基礎(chǔ)設(shè)施更加廉價(jià)。

很多企業(yè)傾向于使用微服務(wù)架構(gòu)來(lái)開(kāi)發(fā)應(yīng)用。微服務(wù)開(kāi)發(fā)快速,職責(zé)單一,能夠更快速的被客戶所采納。同時(shí),這些應(yīng)用能夠通過(guò)快速迭代的方式,得到進(jìn)化,贏得客戶的認(rèn)可。云原生可以打通微服務(wù)開(kāi)發(fā)、測(cè)試、部署、發(fā)布的整個(gè)流程環(huán)節(jié)。

云供應(yīng)商為迎合市場(chǎng),提供了滿足各種場(chǎng)景方案的 API,例如用于定位的 Google Maps,用于社交協(xié)作的認(rèn)證平臺(tái)等。將所有這些 API 與企業(yè)業(yè)務(wù)的特性和功能混合在一起,可以讓他們?yōu)榭蛻魳?gòu)建獨(dú)特的方案。所有這些整合都在 API 層面進(jìn)行。這意味著,不管是移動(dòng)應(yīng)用還是傳統(tǒng)的桌面應(yīng)用都能無(wú)縫集成。所以,采用云原生所開(kāi)發(fā)的應(yīng)用都且具備極強(qiáng)的可擴(kuò)展性。

軟件不可能不出故障。傳統(tǒng)的企業(yè)級(jí)開(kāi)發(fā)方式,需要有專職人員來(lái)對(duì)企業(yè)應(yīng)用進(jìn)行監(jiān)控與維護(hù)。而在云原生架構(gòu)下,底層的服務(wù)或者是API都由將部署到云中,等價(jià)于將繁重的運(yùn)維工作轉(zhuǎn)移給了云平臺(tái)供應(yīng)商。這意味著客戶應(yīng)用將得到更加專業(yè)的看護(hù),同時(shí),也節(jié)省了運(yùn)維成本。

◆◆結(jié) 語(yǔ)◆◆

9年前,Netscape公司的創(chuàng)始人馬克·安德森說(shuō):“軟件正在吞噬世界”;6年前,OpenStack基金會(huì)創(chuàng)始人Jonathan Bryce 補(bǔ)充說(shuō):“世界的一切源于開(kāi)源”;再之后,業(yè)內(nèi)普遍認(rèn)同“云計(jì)算已改變了天空的顏色”;但近兩年云計(jì)算概念又被清晰細(xì)分,“云原生”才是那條最大的魚(yú)。

“大魚(yú)”來(lái)了,我們能做的不是墨守成規(guī),而是擁抱“大魚(yú)”,時(shí)代在召喚云原生,但是云原生不是一蹴而就,而是有個(gè)循序漸進(jìn)的過(guò)程。排斥云原生,了解云原生,擁抱云原生,追隨云原生。

參考資料:

1.Kubernetes 是什么?,Linux中國(guó)

2.Kubernetes與云原生應(yīng)用概覽,宋凈超

3.云原生的不同解釋及正確含義,倚天碼農(nóng)

4.10分鐘看懂Docker和K8S,鮮棗課堂

5.CNCF官方大使張磊:什么是云原生?

THEEND

最新評(píng)論(評(píng)論僅代表用戶觀點(diǎn))

更多
暫無(wú)評(píng)論