什么是云原生架構(gòu)?云原生和應(yīng)用上云不是一碼事!
你知道的越多,不知道的就越多,業(yè)余的像一棵小草!
成功路上并不擁擠,因?yàn)閳?jiān)持的人不多。
編輯:業(yè)余草
blog.csdn.net/gavinchen1985
推薦:https://www.xttblog.com/?p=5233

什么是云原生架構(gòu)
所謂云原生架構(gòu),Cloud Native Computing Foundation 的定義是這樣的:
?Cloud-native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.
These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.
?
云原生架構(gòu)的目的是使企業(yè)能夠在公有云,私有云或者混合云等動(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è)的重大變更。
軟件架構(gòu)的目的一般都是幫助開發(fā)團(tuán)隊(duì)將關(guān)注點(diǎn)盡可能聚焦在業(yè)務(wù)代碼的實(shí)現(xiàn)上。通常,開發(fā)軟件系統(tǒng),代碼包含三部分內(nèi)容,即處理業(yè)務(wù)邏輯的代碼、第三方依賴、處理非功能特性的代碼。這三部分中只有業(yè)務(wù)代碼真正產(chǎn)生業(yè)務(wù)價(jià)值,另外兩個(gè)部分都只算附屬物。軟件規(guī)模越大、非功能特性要求越復(fù)雜,非業(yè)務(wù)代碼開發(fā)量越大,復(fù)雜度越高,系統(tǒng)迭代會(huì)越來越緩慢,成本業(yè)務(wù)越來越高。所以,在軟件規(guī)模較大、功能復(fù)雜的情況下又要保證敏捷迭代,就需要將非業(yè)務(wù)代碼盡可能剝離出來,利用可靠的第三方托管服務(wù)來提升開發(fā)效率和系統(tǒng)質(zhì)量。而云平臺(tái)提供了豐富的用于處理非功能需求的服務(wù)和組件,所以利用云原生架構(gòu)充分利用云平臺(tái)上的各類資源,可以很好的解決這方面的問題,下面是微軟整理應(yīng)用云原生技術(shù)的實(shí)際案例:
| 公司 | 案例 |
|---|---|
| Netflix | 生產(chǎn)環(huán)境中部署 600+個(gè)服務(wù)。每天部署上百次。 |
| Uber | 生產(chǎn)環(huán)境中部署 1000+個(gè)服務(wù)。每周部署數(shù)百次。 |
| 生產(chǎn)環(huán)境中部署 3000+個(gè)服務(wù)。每天部署上千次。 |
云原生架構(gòu)必要條件
所以,云原生架構(gòu)要解決的問題不是只簡(jiǎn)單的將應(yīng)用遷移到云上,而是通過一組架構(gòu)原則和設(shè)計(jì)模式,將應(yīng)用中的非業(yè)務(wù)代碼部分進(jìn)行最大化的剝離,從而讓云設(shè)施接管應(yīng)用中原有的大量非功能特性(如彈性、韌性、安全、 可觀測(cè)性、灰度等),使業(yè)務(wù)不再受非功能性業(yè)務(wù)中斷困擾的同時(shí),具備輕量、敏捷、高度自動(dòng)化的特點(diǎn)。而為了實(shí)現(xiàn)這些,云原生架構(gòu)應(yīng)具備如下條件:微服務(wù)架構(gòu),不可變基礎(chǔ)設(shè)施和托管服務(wù)。
微服務(wù)架構(gòu)
云原生架構(gòu)的初衷是為了充分利用云平臺(tái)的技術(shù)資源來減輕應(yīng)用開發(fā)非功能業(yè)務(wù)需求的負(fù)擔(dān),但同時(shí)對(duì)應(yīng)用本身架構(gòu)的影響也很大。傳統(tǒng)的單體應(yīng)用是無法上面提到的特性的,所以微服務(wù)架構(gòu)是實(shí)現(xiàn)云原生應(yīng)用的必要條件(再說一次,把應(yīng)用遷移到云平臺(tái)上的虛擬機(jī)里不叫云原生應(yīng)用)。而成熟度較高的云原生的架構(gòu)設(shè)計(jì)要求也更多, 12-Factor 可以作為云原生架構(gòu)的方法論:
使用標(biāo)準(zhǔn)化流程自動(dòng)配置,從而使新的開發(fā)者花費(fèi)最少的學(xué)習(xí)成本加入這個(gè)項(xiàng)目; 和操作系統(tǒng)之間盡可能的劃清界限,在各個(gè)系統(tǒng)中提供最大的可移植性; 適合部署在現(xiàn)代的云計(jì)算平臺(tái),從而在服務(wù)器和系統(tǒng)管理方面節(jié)省資源; 將開發(fā)環(huán)境和生產(chǎn)環(huán)境的差異降至最低,并使用持續(xù)交付實(shí)施敏捷開發(fā); 可以在工具、架構(gòu)和開發(fā)流程不發(fā)生明顯變化的前提下實(shí)現(xiàn)擴(kuò)展;
這套理論適用于任意語言和后端服務(wù)(數(shù)據(jù)庫、消息隊(duì)列、緩存等)開發(fā)的應(yīng)用程序。
THE TWELVE-FACTOR APPLICATION




在文章 Beyond the Twelve-Factor App中, Kevin Hoffman 解釋了 12 factors (written in 2011). 另外基于現(xiàn)在對(duì)于云應(yīng)用開發(fā)的需求又增加了三個(gè)要素。

不可變基礎(chǔ)設(shè)施
云原生架構(gòu)理想的計(jì)算環(huán)境是動(dòng)態(tài)的,平臺(tái)提供的計(jì)算資源可以隨時(shí)快速交付,提升、擴(kuò)展、遷移或者銷毀。并且,整個(gè)基礎(chǔ)環(huán)境變化過程中都是在無人關(guān)注的情況下自動(dòng)實(shí)現(xiàn)的。如何實(shí)現(xiàn)呢?在DevOps中提出了一個(gè)Pets vs. Cattle (寵物和牲口)的概念。
在過去依賴傳統(tǒng)的高可靠性基礎(chǔ)設(shè)施的時(shí)代,服務(wù)的可靠性依賴于高可靠性的服務(wù)器。因此對(duì)待服務(wù)器就像對(duì)待寵物一樣,要實(shí)時(shí)關(guān)注服務(wù)的狀態(tài)并精心維護(hù),在系統(tǒng)故障或需要升級(jí)的時(shí)候需要通過對(duì)服務(wù)器進(jìn)行修復(fù)、配置實(shí)現(xiàn)。但這種模式下,基礎(chǔ)設(shè)施具有很高的擁有成本,并且初始化,配置的成本也非常高(對(duì)于大中型機(jī),甚至重啟都是一種奢侈)。
而“牲口”模式下,處理就簡(jiǎn)單粗暴的多了,如果底層系統(tǒng)故障或者需要升級(jí),直接殺掉然后重新創(chuàng)建一個(gè)新的就好了。而云原生架構(gòu)下底層基礎(chǔ)資源采用的就是這種“Cattle”的運(yùn)維模式,即所謂“「不可變基礎(chǔ)設(shè)施」”。不可變基礎(chǔ)設(shè)施里的“不可變”非常類似于程序設(shè)計(jì)中的“不可變”概念。程序設(shè)計(jì)中不可變變量(Immutable Variable)就是在完成賦值后就不能發(fā)生更改,只能創(chuàng)建新的來整體替換舊的。由于具有這樣的特性這種變量可以在并發(fā)環(huán)境下安全的使用。對(duì)于基礎(chǔ)設(shè)施的不可變性,最基本的就是指運(yùn)行服務(wù)的服務(wù)器在完成部署后,就不再進(jìn)行更改。這一點(diǎn)是通過容器鏡像來實(shí)現(xiàn)的,其含義就是應(yīng)用的基礎(chǔ)設(shè)施應(yīng)該是不可變的,是一個(gè)自包含、自描述可以完全在不同環(huán)境中遷移的東西。
Cloud Native Computing Foundation (CNCF)定義了如下的云原生架構(gòu)模型。

基礎(chǔ)設(shè)施層(Infrastructure)代表實(shí)際的計(jì)算資源,包括物理服務(wù)器或者虛擬機(jī)。提供層(Provisioning)實(shí)現(xiàn)對(duì)宿主機(jī)的管理,包括安裝操作系統(tǒng)等。
運(yùn)行時(shí)層(Runtime)主要包括容器運(yùn)行時(shí)環(huán)境,包含容器運(yùn)行時(shí)接口(CRI),例如 Docker。容器網(wǎng)絡(luò)接口(CNI)和容器存儲(chǔ)接口(CSI)。
容器編排和管理層(Container orchestration and management)幫助在多宿主機(jī)上實(shí)現(xiàn)大量容器化應(yīng)用的部署。Cloud Foundry, Mesos, Nomad和Kubernetes都是流行的容器編排工具。
在應(yīng)用定義層(Application Definition)開發(fā)者負(fù)責(zé)實(shí)現(xiàn)云原生應(yīng)用的功能,定義應(yīng)用架構(gòu),配置,部署文件,鏡像倉庫,持續(xù)集成/持續(xù)交付等。
托管服務(wù)
托管服務(wù)(managed service)以服務(wù)的形式提供如網(wǎng)絡(luò)、應(yīng)用、基礎(chǔ)設(shè)施以及安全功能,并向用戶提供持續(xù)的支持和底層運(yùn)維。托管服務(wù)的好處就是開箱即用,省去了用戶開發(fā)相應(yīng)功能甚至運(yùn)維的煩惱,一切交給 MSP(managed service provider)。并且在云平臺(tái)中,服務(wù)的交付都是采用 XaaS,即按需付費(fèi)的方式,所以計(jì)費(fèi)也很靈活方便。
目前成熟的 PaaS 云平臺(tái)中,都已經(jīng)提供了相對(duì)完善的托管服務(wù)列表,如訪問控制、數(shù)據(jù)庫、緩存、權(quán)限管理、持續(xù)集成等,幫助用戶盡可能將非功能實(shí)現(xiàn)都外移到 PaaS 或 SaaS 服務(wù)中,而更加關(guān)注業(yè)務(wù)代碼的實(shí)現(xiàn)。
云原生架構(gòu)成熟度模型
如何判斷應(yīng)用架構(gòu)是不是云原生架構(gòu)?可以參考阿里的云原生架構(gòu)成熟度模型(SESORA):

綜上所述,云原生架構(gòu)在系統(tǒng)規(guī)模較大、功能較復(fù)雜的情況下,可以最大化的分離非功能需求代碼實(shí)現(xiàn)并充分利用云平臺(tái)提供的各種資源,但相對(duì)的架構(gòu)要求和復(fù)雜度也較高,如何選擇還需要開發(fā)團(tuán)隊(duì)和架構(gòu)師認(rèn)真權(quán)衡。
參考資料
https://github.com/cncf/foundation/blob/master/charter.md https://docs.microsoft.com/en-us/dotnet/architecture/cloud-native/definition https://www.infoq.com/articles/cloud-native-architecture/ https://www.infoq.cn/article/NZUG7uR1kdwhrIQ05HMM https://www.infoq.cn/article/2017/11/WHAT-SERVICE-MESH-WHY-NEED https://blog.csdn.net/alisystemsoftware/article/details/103370388 https://www.gartner.com/en/information-technology/glossary/msp-management-service-provider http://www.uml.org.cn/yunjisuan/202101071.asp
