我所理解的云原生(二)

前言

上篇《云原生的前世今生(一)》跟大家分享了 Pivotal 和 CNCF 對(duì)云原生的定義,這篇聊聊我自己對(duì)云原生的理解。

先拋結(jié)論,我理解的云原生是一種利用云計(jì)算交付優(yōu)勢(shì)來(lái)構(gòu)建和運(yùn)行應(yīng)用的方法論,當(dāng)你的應(yīng)用按照云計(jì)算交付模式來(lái)構(gòu)建的話,就能充分貼合云計(jì)算的彈性伸縮、分布式、自動(dòng)化等特點(diǎn),而且隨著容器和 Kubernetes 技術(shù)的出現(xiàn),這套原本只適用于公有云的架構(gòu)思路,現(xiàn)在可以輕松在私有云、混合云、甚至單臺(tái)服務(wù)器上搭建,開(kāi)發(fā)人員只需要關(guān)心應(yīng)用是如何創(chuàng)建的,無(wú)需理會(huì)在哪部署。

有些讀者可能會(huì)覺(jué)得,云原生技術(shù)只適用于大公司,小公司可能玩不轉(zhuǎn)。而我認(rèn)為只要你想構(gòu)建一個(gè)分布式、彈性伸縮、容錯(cuò)性好、易于管理、便于觀察、在哪都能部署的應(yīng)用,無(wú)論是大公司還是小公司,云原生技術(shù)都是一個(gè)不錯(cuò)的選擇。

什么是云計(jì)算?

要想理解什么是云原生,需要先理解什么是云計(jì)算。



云計(jì)算簡(jiǎn)單來(lái)說(shuō)就是云平臺(tái)提供(包括服務(wù)器、存儲(chǔ)、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)、軟件、分析和智能)等云服務(wù),通過(guò)因特網(wǎng)提供快速創(chuàng)新、彈性資源和規(guī)模經(jīng)濟(jì)。對(duì)于云服務(wù)而言,通常你可以根據(jù)業(yè)務(wù)需求的變化,隨時(shí)增減服務(wù)和用量,從而幫助降低運(yùn)營(yíng)成本,使基礎(chǔ)設(shè)施更加有效地運(yùn)行??偟膩?lái)說(shuō),云計(jì)算的本質(zhì)是按需分配資源和彈性計(jì)算。云計(jì)算的優(yōu)勢(shì)有:

  • 費(fèi)用:云計(jì)算讓你無(wú)需在購(gòu)買硬件和軟件以及設(shè)置和運(yùn)行現(xiàn)場(chǎng)數(shù)據(jù)中心(包括服務(wù)器機(jī)架、用于供電和冷卻 的全天不間斷電力、管理基礎(chǔ)結(jié)構(gòu)的專家)上進(jìn)行資金投入。
  • 速度:大多數(shù)云計(jì)算服務(wù)作為按需自助服務(wù)提供,因此通常只需點(diǎn)擊幾下鼠標(biāo),即可在數(shù)分鐘內(nèi)調(diào)配海量計(jì)算資源,賦予企業(yè)非常大的靈活性,并消除了容量規(guī)劃的壓力。
  • 性能:云計(jì)算服務(wù)商會(huì)定期升級(jí)到快速而高效的硬件,保證云計(jì)算的性能最優(yōu)。
  • 可靠性:云計(jì)算能夠以較低費(fèi)用簡(jiǎn)化數(shù)據(jù)備份、災(zāi)難恢復(fù)和實(shí)現(xiàn)業(yè)務(wù)連續(xù)性。
  • 安全性:許多云提供商都提供了廣泛的用于提高整體安全情況的策略和技術(shù)。
  • 工作效率:云計(jì)算避免了大量的軟硬件維護(hù)工作,讓團(tuán)隊(duì)可以專注于業(yè)務(wù)目標(biāo)。
  • 彈性伸縮:云計(jì)算最大的優(yōu)點(diǎn)是彈性擴(kuò)展能力。對(duì)于云而言,這意味著能夠在需要的時(shí)候從適當(dāng)?shù)牡乩砦恢锰峁┻m量的資源。

什么是云原生應(yīng)用?

隨著提供云計(jì)算的廠商越來(lái)越多,使用云計(jì)算的成本也在逐步降低,再加上云計(jì)算的優(yōu)勢(shì)明顯,所以越來(lái)越多的開(kāi)發(fā)者在應(yīng)用創(chuàng)建之初就選擇云服務(wù),而不再購(gòu)置昂貴的服務(wù)器,這些自創(chuàng)建之初就被托管在云平臺(tái)的應(yīng)用,可稱之為云原生應(yīng)用。

云原生應(yīng)用,是專門為在云平臺(tái)部署和運(yùn)行而設(shè)計(jì)的應(yīng)用。云原生應(yīng)用并非完全顛覆傳統(tǒng)的應(yīng)用,采用云原生的設(shè)計(jì)模式可以優(yōu)化和改進(jìn)傳統(tǒng)應(yīng)用模式,使應(yīng)用更加適合在云平臺(tái)上運(yùn)行。

在云計(jì)算越來(lái)越流行的今天,云原生成了一個(gè)必然的導(dǎo)向。云原生存在的意義是解放開(kāi)發(fā)和運(yùn)維,而不是讓開(kāi)發(fā)和運(yùn)維工作變得更加復(fù)雜和繁重。

其實(shí),大部分傳統(tǒng)應(yīng)用即便不做任何改動(dòng),也可以在基于 Linux 操作系統(tǒng)內(nèi)核的云平臺(tái)上部署和運(yùn)行,但是僅以能夠部署和運(yùn)行為主要目的,將云主機(jī)當(dāng)作物理機(jī)一樣使用,無(wú)法充分利用云平臺(tái)的能力。

讓應(yīng)用能夠利用云平臺(tái)實(shí)現(xiàn)資源的按需分配和彈性伸縮,是云原生應(yīng)用被重點(diǎn)關(guān)注的地方。云原生還關(guān)注規(guī)模,分布式系統(tǒng)應(yīng)該具備將節(jié)點(diǎn)擴(kuò)展到成千上萬(wàn)個(gè)的能力,并且這些節(jié)點(diǎn)應(yīng)具有多租戶和自愈能力。

本質(zhì)上來(lái)說(shuō),云原生是一種設(shè)計(jì)模式,它要求云原生應(yīng)用具備伸縮性和可用性,以及自動(dòng)化部署和管理的能力,可隨處運(yùn)行,并且能夠通過(guò)持續(xù)集成、持續(xù)交付工具提升研發(fā)、測(cè)試與發(fā)布的效率。

云原生的重要特性

云原生應(yīng)用的特性很多,本文重點(diǎn)聊聊伸縮性和可用性。這兩大特性可以拆解成4個(gè)關(guān)鍵詞:負(fù)載均衡、可用冗余、容錯(cuò)轉(zhuǎn)移、資源調(diào)配。



負(fù)載平衡:云平臺(tái)通常用水平擴(kuò)容的策略來(lái)調(diào)節(jié)計(jì)算能力,這就要求一個(gè)云原生應(yīng)用,可以同時(shí)運(yùn)行多個(gè)實(shí)例,且多個(gè)實(shí)例的狀態(tài)是共享的、統(tǒng)一的,當(dāng)應(yīng)用的計(jì)算量激增時(shí),云平臺(tái)會(huì)主動(dòng)為應(yīng)用增加新的實(shí)例,以調(diào)節(jié)計(jì)算壓力,在請(qǐng)求量降低時(shí),云平臺(tái)也會(huì)動(dòng)態(tài)刪除多余的實(shí)例,以保障資源最優(yōu)。而在本地環(huán)境,如果需要更高的處理能力,只能更換到一個(gè)更強(qiáng)大的服務(wù)器上,或者對(duì)這個(gè)服務(wù)器進(jìn)行升級(jí),比如:增加內(nèi)存、磁盤容量等等。

可用冗余:云平臺(tái)通常用冗余的策略來(lái)保障應(yīng)用的可用性,假設(shè)你的應(yīng)用需要達(dá)到5個(gè)9的可用性(表示在1年時(shí)間里最多只能有5.26分鐘的業(yè)務(wù)中斷),那么在云平臺(tái)上,通常會(huì)采用異地雙機(jī)房*雙實(shí)例的部署模式,當(dāng)任意實(shí)例發(fā)生故障時(shí),請(qǐng)求會(huì)立即切換到同機(jī)房的另一個(gè)實(shí)例上,當(dāng)某個(gè)機(jī)房停電或光纜被挖斷時(shí),另一地域機(jī)房中的實(shí)例也能快速響。如果想進(jìn)一步提高的可用性,還可以繼續(xù)增加實(shí)例,并且盡量分散地域部署。而在本地環(huán)境,服務(wù)器偶爾宕機(jī)或停電,馬上就會(huì)導(dǎo)致服務(wù)不可用超過(guò)5分鐘。

容錯(cuò)轉(zhuǎn)移:當(dāng)一個(gè)服務(wù)器失效之后,云平臺(tái)會(huì)迅速把應(yīng)用遷移到另一臺(tái)服務(wù)器,來(lái)恢復(fù)這個(gè)應(yīng)用的可用性。對(duì)于一個(gè)典型的云數(shù)據(jù)中心來(lái)講,通常都是有幾十萬(wàn)臺(tái)服務(wù)器的,即便只有1%的錯(cuò)誤率,每天這個(gè)云數(shù)據(jù)中心的錯(cuò)誤也是數(shù)以千計(jì)的,你的應(yīng)用很有可能就部署在失效的那個(gè)服務(wù)器上,所以云原生應(yīng)用需要做好隨時(shí)被遷移到另一臺(tái)服務(wù)器上的準(zhǔn)備。

資源調(diào)配:應(yīng)用遷移不光出現(xiàn)在服務(wù)器失效的時(shí)候,云平臺(tái)有時(shí)也會(huì)主動(dòng)調(diào)節(jié)不同服務(wù)器上的負(fù)載來(lái)達(dá)到一個(gè)資源優(yōu)化,也就是說(shuō)應(yīng)用和服務(wù)器本身都沒(méi)有問(wèn)題,也有可能觸發(fā)應(yīng)用的遷移。而在本地環(huán)境,服務(wù)器宕機(jī)是一件很大的事情,會(huì)直接導(dǎo)致你的服務(wù)不可用,并且很難快速恢復(fù)。

云原生的蓬勃發(fā)展

為了滿足云原生應(yīng)用特性的要求,云平臺(tái)需要具備哪些具體的能力呢?



1、快速、穩(wěn)定地重新發(fā)布。無(wú)論是容錯(cuò)轉(zhuǎn)移還是彈性伸縮,云平臺(tái)需要能快速的把你的應(yīng)用,重新發(fā)布到另外一臺(tái)服務(wù)器上。在歷史上人們有很多不同的解決方案:1)一開(kāi)始是部署腳本+安裝程序的形式,但書寫一個(gè)兼容性良好的部署腳本是一個(gè)十分復(fù)雜的工作;2)后來(lái)人們提出了虛擬化概念,通過(guò)虛擬機(jī)的形式,把應(yīng)用和所有類庫(kù)以及底層操作系統(tǒng)全部打包成一個(gè)虛擬機(jī)鏡像,部署時(shí)直接用鏡像進(jìn)行還原,這個(gè)方法雖然解決了兼容性問(wèn)題,但又產(chǎn)生了部署效率問(wèn)題,因?yàn)橐粋€(gè)完整的虛擬機(jī)鏡像,無(wú)論是在下載、還是在調(diào)度上,都需要很大的時(shí)間開(kāi)銷;3)再后來(lái)出現(xiàn)了容器技術(shù),它統(tǒng)一解決了不同操作系統(tǒng)之間的兼容性問(wèn)題,并給大家提供了一種輕量級(jí)的封裝方式,支持把應(yīng)用和它依賴的類庫(kù)打包成一個(gè)尺寸較小的容器鏡像,這種容器鏡像不管是傳輸、還是重新發(fā)布,都可以達(dá)到很快的速度。



2、動(dòng)態(tài)、靈活的網(wǎng)絡(luò)。同樣是容錯(cuò)轉(zhuǎn)移或者是彈性伸縮,云原生應(yīng)用的實(shí)例會(huì)不停的在數(shù)據(jù)中心進(jìn)行遷移,實(shí)例在遷移的過(guò)程中要保證它和其他部件之間的連接穩(wěn)定,所以需要?jiǎng)討B(tài)、靈活的網(wǎng)絡(luò)。1)一開(kāi)始人們也是提供這種配置腳本,對(duì)不同的網(wǎng)絡(luò)硬件書寫特定的腳本來(lái)進(jìn)行配置,這個(gè)工作同樣也是非常復(fù)雜的;2)后來(lái)有了 SDN 軟件定義網(wǎng)絡(luò)的方式,就是說(shuō)在硬件網(wǎng)絡(luò)基礎(chǔ)層的上面,通過(guò)軟件來(lái)定義網(wǎng)絡(luò)的一些功能,比如路由的分配等等;3)再后來(lái)出現(xiàn)了 kubernetes 和 Service Mesh,就是說(shuō)在軟件和硬件的網(wǎng)絡(luò)架構(gòu)上,可以再貼一層服務(wù)網(wǎng)格進(jìn)行更靈活的、私有的、服務(wù)之間的連接配置。

隨著容器和 Kubernetes 等云原生技術(shù)的出現(xiàn),這套原本只適用于公有云的架構(gòu)思路,現(xiàn)在可以輕松在私有云、混合云、甚至單臺(tái)服務(wù)器上搭建,開(kāi)發(fā)人員只需要關(guān)心應(yīng)用是如何創(chuàng)建的,無(wú)需理會(huì)在哪部署。目前已經(jīng)從 CNCF 畢業(yè)的云原生項(xiàng)目主要有:

項(xiàng)目名稱 GitHub Star 官網(wǎng)地址 項(xiàng)目描述
Kubernetes 80k+ https://kubernetes.io/ 是用于自動(dòng)部署,擴(kuò)展和管理容器化應(yīng)用程序的開(kāi)源系統(tǒng)。
Prometheus 39k+ https://prometheus.io/ 使用領(lǐng)先的開(kāi)源監(jiān)控解決方案為您的指標(biāo)和警報(bào)提供支持。
etcd 37k+ https://etcd.io/ 是一種開(kāi)源的分布式統(tǒng)一鍵值存儲(chǔ),用于分布式系統(tǒng)或計(jì)算機(jī)集群的共享配置、服務(wù)發(fā)現(xiàn)和的調(diào)度協(xié)調(diào)。etcd 有助于促進(jìn)更加安全的自動(dòng)更新,協(xié)調(diào)向主機(jī)調(diào)度的工作,并幫助設(shè)置容器的覆蓋網(wǎng)絡(luò)。
Helm 20k+ https://helm.sh/ Helm is the best way to find, share, and use software built for Kubernetes.
Envoy 18k+ https://envoy.com/ 是專為大型現(xiàn)代 SOA(面向服務(wù)架構(gòu))架構(gòu)設(shè)計(jì)的 L7 代理和通信總線。
Harbor 15k+ https://goharbor.io/ Harbor 是一個(gè)開(kāi)源注冊(cè)表,它通過(guò)策略和基于角色的訪問(wèn)控制來(lái)保護(hù)工件,確保圖像被掃描且沒(méi)有漏洞,并將圖像簽名為受信任的。 Harbor 是 CNCF 畢業(yè)的項(xiàng)目,可提供合規(guī)性、性能和互操作性,幫助您跨云原生計(jì)算平臺(tái)(如 Kubernetes 和 Docker)一致且安全地管理工件。
Jaeger 14k+ https://www.jaegertracing.io/ end-to-end distributed tracing.
Vitess 12k+ https://vitess.io/ 是一個(gè)數(shù)據(jù)庫(kù)集群系統(tǒng),用于通過(guò)廣義分片對(duì) MySQL 進(jìn)行水平擴(kuò)展。
Fluentd 10k+ https://www.fluentd.org/ Fluentd是一個(gè)開(kāi)源的數(shù)據(jù)收集器,專為處理數(shù)據(jù)流設(shè)計(jì),使用JSON作為數(shù)據(jù)格式。它采用了插件式的架構(gòu),具有高可擴(kuò)展性高可用性,同時(shí)還實(shí)現(xiàn)了高可靠的信息轉(zhuǎn)發(fā)。
TiKV 9k+ https://tikv.org/ TiKV 是一個(gè)分布式的 KV 系統(tǒng),它采用 Raft 協(xié)議保證數(shù)據(jù)的強(qiáng)一致性,同時(shí)使用 MVCC + 2PC 的方式實(shí)現(xiàn)了分布式事務(wù)的支持。
containerd 9k+ https://containerd.io/ 是一種行業(yè)標(biāo)準(zhǔn)的集裝箱運(yùn)行時(shí)間,強(qiáng)調(diào)簡(jiǎn)單性、堅(jiān)固性和便攜性。它可作為 Linux 和 Windows 的守護(hù)神,可管理其主機(jī)系統(tǒng)的完整容器生命周期:圖像傳輸和存儲(chǔ)、容器執(zhí)行和監(jiān)督、低級(jí)存儲(chǔ)和網(wǎng)絡(luò)附件等。
Rook 9k+ https://rook.io/ 是一款云原生環(huán)境下的開(kāi)源分布式存儲(chǔ)編排系統(tǒng),目前支持 Ceph、NFS、Edegefs、Cassandra、CockroachDB等存儲(chǔ)系統(tǒng)。它實(shí)現(xiàn)了一個(gè)自動(dòng)管理的、自動(dòng)擴(kuò)容的、自動(dòng)修復(fù)的分布式存儲(chǔ)服務(wù)。Rook 支持自動(dòng)部署、啟動(dòng)、配置、分配、擴(kuò)容/縮容、升級(jí)、遷移、災(zāi)難恢復(fù)、監(jiān)控以及資源管理。
CoreDNS 8k+ https://coredns.io/ 是一個(gè)靈活可擴(kuò)展的 DNS 服務(wù)器,可以作為 Kubernetes 集群 DNS。
Linkerd 7k+ https://linkerd.io/ 出現(xiàn)是為了解決像twitter、google這類超大規(guī)模生產(chǎn)系統(tǒng)的復(fù)雜性問(wèn)題。Linkerd不是通過(guò)控制服務(wù)之間的通信機(jī)制來(lái)解決這個(gè)問(wèn)題,而是通過(guò)在服務(wù)實(shí)例之上添加一個(gè)抽象層來(lái)解決的。
Open Policy Agent 5k+ https://www.openpolicyagent.org/ 官方簡(jiǎn)稱OPA, 為這類策略決策需求提供了一個(gè)統(tǒng)一的框架與服務(wù)。它將策略決策從軟件業(yè)務(wù)邏輯中解耦剝離,將策略定義、決策過(guò)程抽象為通用模型,實(shí)現(xiàn)為一個(gè)通用策略引擎,可適用于廣泛的業(yè)務(wù)場(chǎng)景

在國(guó)內(nèi),阿里云將云原生升級(jí)為技術(shù)戰(zhàn)略,積極參與到云原生生態(tài)的建設(shè),持續(xù)沉淀簡(jiǎn)單易用的云原生產(chǎn)品,并在自身業(yè)務(wù)中充分實(shí)踐云原生,取得了非常不錯(cuò)的成效。


我們靈活運(yùn)用這些云原生技術(shù),配合 CNCF 云原生實(shí)踐路線圖 ,相信大家能輕松的構(gòu)建自己的云原生應(yīng)用。

參考

PS:關(guān)注我的公眾號(hào)【劼哥舍】,一起學(xué)習(xí)成長(zhǎng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容