云原生解決什么問(wèn)題?

最近在考慮從云原生角度去做一些架構(gòu)維度的改造。但之前關(guān)注的在于平地而起的理想態(tài)云原生方案,基于存量架構(gòu)來(lái)說(shuō)就比較復(fù)雜了,比如如何銜接現(xiàn)有系統(tǒng)存量能力,低成本接入,同時(shí)還可以吃到技術(shù)升級(jí)的紅利。
非常多的人在討論云原生,那什么是云原生?解決什么問(wèn)題?
上云的目的是利用云平臺(tái)的優(yōu)勢(shì),比如按需分配、彈性伸縮都是云原生的關(guān)注點(diǎn),但應(yīng)用程序并不能輕松的上云。所以想要應(yīng)用程序可以利用云平臺(tái)的優(yōu)勢(shì),就需要對(duì)應(yīng)用系統(tǒng)進(jìn)行云原生改造。
那么什么是云原生?
Pivotal給出的云原生應(yīng)用的幾個(gè)特征可以參考,符合12因素應(yīng)用、面向微服務(wù)架構(gòu)、自服務(wù)敏捷架構(gòu)、基于API協(xié)作及抗脆弱性。
其實(shí)云原生是一個(gè)思想集合,云原生技術(shù)包括技術(shù)維度、應(yīng)用管理維度、企業(yè)管理維度等。
- 技術(shù)維度:微服務(wù)、敏捷基礎(chǔ)設(shè)施
- 應(yīng)用管理維度:DevOps、持續(xù)交付
- 企業(yè)管理維度:康威定律
更細(xì)化的架構(gòu)維度特質(zhì)包括:
1. 模塊化應(yīng)用
2. 可觀測(cè)性
3. 可部署性
4. 可測(cè)試性
5. 可處理性
6. 可替換性
歸納下來(lái)即,DevOps、持續(xù)交付、微服務(wù)、容器化。

那CNCF對(duì)云原生定義是什么呢?
包含三個(gè)方面:
1. 應(yīng)用容器化
2. 面向微服務(wù)架構(gòu)
3. 應(yīng)用支持容器的編排調(diào)度
由于CNCF是以K8s為底座的,所以其關(guān)于云原生定義的概念主要圍繞于上云,即:通過(guò)云原生實(shí)現(xiàn)各組織在公有云、私有云、混合云等新動(dòng)態(tài)環(huán)境下,構(gòu)建可擴(kuò)展的彈性應(yīng)用,涉及到容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施、聲明式API。
通過(guò)以上技術(shù)可以構(gòu)建更具容錯(cuò)性、易于管理、便于觀察的松耦合系統(tǒng)。

容器
說(shuō)不太好是容器推進(jìn)了云原生,還是云原生推進(jìn)了容器發(fā)展。起碼以目前看,容器是云原生下最關(guān)鍵的技術(shù),有了Docker,整個(gè)云原生才找到了正確的打開(kāi)方式。
Docker背后代表了基于鏡像的動(dòng)態(tài)交付,依賴(lài)于新型的應(yīng)用打包、分發(fā)、運(yùn)行機(jī)制。將容器鏡像將應(yīng)用運(yùn)行時(shí)環(huán)境、代碼、依賴(lài)庫(kù)、工具、資源文件等打包成一種操作系統(tǒng)無(wú)關(guān)的變更軟件包。實(shí)現(xiàn)了buid once、run anywhere。
微服務(wù)
在微服務(wù)架構(gòu)下,每個(gè)服務(wù)實(shí)例是獨(dú)立可部署的組件,對(duì)外以API暴露能力,通過(guò)微服務(wù)實(shí)現(xiàn)了云原生下面的應(yīng)用模塊化要求,進(jìn)而實(shí)現(xiàn)了服務(wù)之間的松耦合。
每個(gè)服務(wù)都可以獨(dú)立開(kāi)發(fā)、測(cè)試、驗(yàn)證、部署。
服務(wù)網(wǎng)格
服務(wù)網(wǎng)格主要提供的是服務(wù)之間通信的通信基礎(chǔ)設(shè)施,保障了服務(wù)之間通信的可靠性傳遞。
做好服務(wù)網(wǎng)格的標(biāo)準(zhǔn):
應(yīng)用程序通信的中間層
輕量級(jí)網(wǎng)絡(luò)代理
應(yīng)用程序無(wú)感知
解耦應(yīng)用程序的重試、超時(shí)、監(jiān)控、追蹤、服務(wù)發(fā)現(xiàn)
服務(wù)網(wǎng)格一般通過(guò)一組輕量級(jí)網(wǎng)絡(luò)代理實(shí)現(xiàn),這些代理和應(yīng)用程序一起部署,建設(shè)對(duì)應(yīng)用系統(tǒng)入侵。將傳統(tǒng)服務(wù)通信相關(guān)的治理能力和基礎(chǔ)的網(wǎng)絡(luò)通信放在一起,真正和業(yè)務(wù)邏輯解耦開(kāi),簡(jiǎn)單理解就是將網(wǎng)絡(luò)訪問(wèn)、限流、熔斷、監(jiān)控和TCP/IP放在一起。
目前的服務(wù)網(wǎng)格實(shí)現(xiàn)的功能越來(lái)越多,包括服務(wù)發(fā)現(xiàn)、負(fù)載均衡、故障恢復(fù)、指標(biāo)收集、監(jiān)控告警等研發(fā)與運(yùn)維需求,借助于Mesh方案可以實(shí)現(xiàn),如AB測(cè)試、金絲雀發(fā)布、限流、訪問(wèn)控制、端到端認(rèn)證等。

不可變基礎(chǔ)設(shè)施
我覺(jué)得這個(gè)是理念上的改變,一個(gè)工作負(fù)載的承擔(dān)(容器、虛擬機(jī))一旦部署之后不再進(jìn)行修改。當(dāng)需要更新、修復(fù)或修改時(shí),只是將新的、經(jīng)過(guò)驗(yàn)證的工作負(fù)載替換掉就得即可。
不可變基礎(chǔ)設(shè)施主要體現(xiàn)在系統(tǒng)穩(wěn)定性方面,傳統(tǒng)的應(yīng)用程序一旦部署到用戶(hù)特定服務(wù)器上之后,服務(wù)器系統(tǒng)是會(huì)不斷變化的,比如操作系統(tǒng)升級(jí)或在上面安裝新應(yīng)用,這樣在其負(fù)載之上的應(yīng)用穩(wěn)定性就受到了挑戰(zhàn)。
而一旦定義了不可變基礎(chǔ)設(shè)施,就避免了類(lèi)似的問(wèn)題,因?yàn)樗淮嬖诹俗兓膯?wèn)題了。
聲明式API
與聲明式API對(duì)應(yīng)的是命令式API。命令式API提供給用戶(hù)怎么做,聲明式API是給用戶(hù)提供了做什么的能力,簡(jiǎn)單理解,前者是確定性rest api,后者是dsl。
其背后體現(xiàn)的是API背后能力的擴(kuò)展性與彈性。
技術(shù)之外的事情
云原生除了對(duì)應(yīng)用系統(tǒng)做了技術(shù)維度優(yōu)化之外,還在流程與組織維度做了優(yōu)化。它解放了開(kāi)發(fā)和運(yùn)維,讓研發(fā)與運(yùn)維的工作變得簡(jiǎn)單。云原生還關(guān)注于規(guī)模,讓分布式系統(tǒng)具備了水平擴(kuò)展能力,同時(shí)具備了故障之后的快速恢復(fù)能力。
