1. 程式人生 > 其它 >CNCF TOC 委員張磊:不斷演進的雲原生給我們帶來了什麼?

CNCF TOC 委員張磊:不斷演進的雲原生給我們帶來了什麼?

簡介:任何一種雲原生技術,它不再是某種能力的彌補,而是更多地將雲的能力以某種方式更簡單、更高效地透出給我的應用去使用。無論是容器、K8s 還是 Service Mesh,他們都是在不同的環節幫助應用本身能夠更好地去使用雲服務。

作者|張磊

雲原生是什麼?

即使“雲原生”的提出已經有一段時間,但不少人還是會有這樣一個問題:究竟什麼是雲原生?或者說雲原生的確切定義是什麼?

實際上,當我們接觸到很多雲原生的開源技術和產品之後,會逐漸發現一個現象——雲原生本質上其實並不是一個非常確切的物體。也就是說,雲原生其實不存在什麼具體定義,它指的是一個不斷演進的過程。與其談雲原生的本質,不如我們將它理解為一套願景。

那麼這套願景的內容又是什麼呢?

在未來雲的時代,我們的軟體或者應用是天然的生於雲上,長於雲上。之所以會出現這樣一種現象或這樣一個事實,正是因為雲端計算能夠最大程度地去幫助這些軟體降本提效,釋放軟體本身最大的業務價值。這才是雲原生真正想要去做的一件事情,所以它並不是某一項具體的技術,也不是某一個方法,更不是某一個具體的科研專案。

不斷演進的雲原生

下圖能夠直觀地闡明雲原生整體的形態到底是怎麼去演進和發展的。


雲原生非常強調利用雲的特性,所以它的核心方法論和核心概念都是圍繞如何讓我們的軟體和應用去利用雲的特性。那麼雲的特性是什麼呢?比如說雲是能夠無限彈性的、雲的資源是可以快速交付的、雲的使用方法是可以按量付費的,這些都是雲非常本質的特性。

圍繞這些雲的特性,雲原生才有了一套最基礎的方法論和概念。比如大家可能聽說過不可變基礎設施,當我的應用部署在雲上,假設這個應用載體是不可變的,我就可以隨時把它刪掉或替換掉,那麼要更新我的應用會非常容易。如果要升級應用,可以直接採用刪掉舊的、上線新的方式去做,而不是說需要去動態變更應用裡面的某項配置,甚至動態更改程式碼去實現。所以,不可變基礎設施就是一套非常典型的、基於利用雲的快速資源交付能力而形成的方法論。

再比如說,雲原生強調要高度的自動化,實現自運維甚至自愈,其實也是希望軟體本身能夠去更好地利用雲的特性。因為雲的能力是非常強大的,雲能夠提供各種各樣的運維能力,所以應用或者軟體可能從開發的時候,就要考慮到雲其實能夠提供很多能力到應用層,而不是說先開發完應用,再去思考怎麼藉助雲的能力去運維,這樣是構建不出來雲原生應用的。

再比如說,雲原生應用無所謂用什麼語言寫,用什麼框架寫,這也是很明顯的一個特點。因為雲本身是一個基礎設施能力,那麼就不應該也不會去用某種語言或者框架去鎖定。同樣也是希望這個世界上所有的軟體都能夠去利用雲的能力,而不是說雲只能服務於某種語言。

以上這些都是在雲的背景下,雲原生提出的一些非常重要的概念。而這些概念本身在我們的技術研究當中就會被對映成為一系列的系統,或者說架構思想。比如說前面提到不可變基礎設施,可以把一個應用舊的例項刪掉換成新的例項,像這樣的一套方法怎麼去實現?就要靠容器技術。容器技術本質上提供容器映象,一個容器映象是自包含一個應用的執行環境,包括應用本身,可以隨時把這個映象版本替掉,上線一個新的版本就可以了。這其實代表著容器是不可變基礎設施的一個非常良好的實現。

那麼這是不是意味著未來會有某一種技術,能夠更好地去實現不可變基礎設施呢?這是很有可能的,並且這項技術當然也是雲原生的。當未來可能有一個新的技術去實現不可變基礎設施,或者更好地實現不可變基礎設施,那麼這樣一個技術也一定是屬於雲原生的核心範疇。與之類似的,像我們雲原生今天強調的 Sidecar 架構,就是把中介軟體能力通過一個叫 Sidecar 容器的方式去對接到業務容器裡去,而不是說在業務本身上去做定製,整合中介軟體去解決問題。這其實是希望能夠去實踐我們強調的與語言無關、與框架無關的這樣一套方法論所提出的一個架構。而這個架構的特點就是,中介軟體能力不再需要以語言或者框架的方式嵌到業務程式碼本身裡去,所以說 Sidecar 加上容器都能夠去實現這樣的一套方法。

這就是雲原生方法論背後不斷推演出來的一系列技術和架構,而這些技術架構最終在雲原生生態裡面,往往是以開源的技術專案來給大家去使用的。比如說前面提到的容器就會有 Docker 上的專案,我們提到的 Sidecar 和自運維的這套思想,最終會通過 Kubernetes 去幫你去實現。

再比如說最近比較火熱的 Service Mesh,它本質上在幫你去做中介軟體的能力,只不過是通過 Sidecar 這種與語言無關的方式去做;再比如說我們未來或者說現在就已經比較火的 eBPF、WASM,他們其實都是在實踐雲原生這套體系背後的某項思想和某種架構,以開源的方式去滿足讓使用者使用的場景。而正是因為有了這一系列的開源專案,我們才能做到說當我的使用者拿到這樣的開源專案,拿到這樣的技術,他能夠去真正實踐雲原生理念,從而達到我們前面講到的這兩種雲帶來的本質效果:

第一個是提升效率,比如說研發效率、交付效率、運營效率。例如我的應用本身通過容器實現了不可變基礎設施的這樣一套理念,那麼它的交付就可以非常簡單,我只需要做映象,交付映象後它就可以執行在每一個地方;再比如說我們的運維,當你的軟體本身已經實現了自運維,那麼它的運維的難度和成本一定是降低的,所以我們一定能夠藉助雲的能力去提效。

第二個是降低成本,這裡包括了資源成本,也包括了人力成本。比如說通過 Kubernetes 或者說通過容器這樣的專案,我的應用可以更好地、更多地去整合雲服務,通過雲服務來減少運維成本和人力投入,這些都是很明顯的成本降低。再比如說我的應用通過雲原生實現了上雲,又通過雲原生架構,可以很快速地進行資源交付和更新的模式,讓整個應用的資源成本也變得很低,這同樣也是通過雲原生技術,讓應用能夠更好地使用到雲的本質能力的一種非常好的體現和實踐。

總體而言,你會發現這一套雲原生的方法其實是一個很完善的閉環,先不斷去地看、不斷地去探索如何利用雲的特性幫助使用者去提效降本,然後把這一系列的方法或者這一系列的思想,總結沉澱成為雲原生的概念和方法論,再通過一系列相應的架構和對應的開源專案將其實現,最後再讓使用者能夠去使用這些技術,從而達到釋放雲端計算紅利的本質目的。

所以說雲原生它沒有一個具體的定義,它實際上是一套不斷自我演進的理論體系加上最佳實踐的組合。

今天的雲原生

今天的雲原生可能是圍繞著容器和 Kubernetes 來構建的,而這樣的專案實際上在幫助我們去實踐很多雲原生背後的本質思想,包括不可變基礎設施、自動化等。今天 Kubernetes 被認為是一個雲時代的通用控制平面,也有人把它叫做作業系統,就是說你的所有操作都可以藉助 Kubernetes 在雲上統一去完成。

1、Kubernetes 專案的“安卓化”

Kubernetes 專案的角色可能會越來越像一個安卓。舉一個例子,比如說今天的 Kubernetes 其實正在做到無處不在,每個地方每個雲層都有 Kubernetes,甚至部署在端的使用者、或者部署在邊緣的環境下都是非常正常的,就跟安卓一樣,車上也有,我們電視裡也有,甚至空調也會有可能有一個安卓。


那麼更重要的是,使用者使用 Kubernetes 的本質目的是什麼?是交付和管理它的軟體。比如說我用 Kubernetes 一定是在上面部署了某一個東西,比如說 AI 的服務或者淘寶,使用者的本質目的是使用這套東西來管理軟體。而 Kubernetes 本身其實對上暴露的是一系列格式化的抽象,比如說 Deployment、Service、Ingress,讓我能夠去管理和交付我的應用;而對下它啟動了一套標準化的介面,比如說通過 CNI 就可以對接阿里雲網絡,對接自研網路外掛,所以它本質上是一箇中間層,即一個控制平面,接入了大量的基礎設施,而他們暴露的東西成為了我的應用所需要的一些能力,讓我能夠去用這些能力去管理應用。

那麼這樣的一個趨勢往後面不斷去研究的話,就會發現這個跟安卓特別相似。比如說安卓在手機本身其實是不付錢,但是應用市場裡的應用是要付錢的。安卓的價值在於它把使用者的手機抽象、包裝、封裝成一系列應用可以使用的 API,所以說安卓的價值和今天 Kubernetes 是完全一樣的。

未來我們會看到,Kubernetes 它不僅會出現在各種不一樣的地方,更重要的是它會為應用軟體的研發、運維、交付的全生命週期提供一系列完整的能力,讓使用者可以使用它。與此同時,為了能夠更好地把軟體交付出去,我們會發現未來還會有很多這樣的專案專門幫助你去解決軟體在 K8s 上交付的問題。與此同時,我們以前的傳統 PaaS 會不復存在,因為它的能力已經全部被 Kubernetes 接管了,而未來會出現更多的這種開放的可擴充套件的 PaaS,他們的作用是讓你能夠去更好地更簡單地交付和管理軟體,就像安卓上的豌豆莢,可以很容易地去管理軟體。對於這樣一個趨勢,我把它叫做 Kubernetes 的“安卓化”。

2、應用與能力的“Operator化”

而另一個趨勢就是,在今天雲原生的生態裡面,不論是我的應用還是我的能力,它都會往一個非常能夠自動化的方向去演進,我把它叫做 “Operator 化”。


Operator 是 Kubernetes 裡面的一個核心思想,它代表著我的任何一個應用和它所需要的能力都可以定義成為一個 Kubernetes 的 API 物件,通過一個叫做 Controller 的機制讓你去使用雲的能力,再讓你接入到各種各樣的基礎設施裡面。這個 Operator 化帶來的一個直接結果就是,我的應用本身是高度自動化的,包括自愈、健壯性、可靠性、執行的確定性,這些在今天都可以交給 Kubernetes去解決。我的使用者或者說我應用的 owner,不需要再關心這些問題。

那麼這也是我們今天在 K8s 安卓化的背景下看到的另外一個趨勢,就是我的應用本身和業務所需要的能力會不斷地往自動化方向去演進。這也非常符合雲原生的理念,因為你的應用自動化和自愈能力越強,你就越能夠去跟雲去對接,人工需要去記錄的成本會更低,時間也會更少,更多的是把我的自動化能力跟雲去對接好,讓雲幫助我去解決所有問題。

3、應用中介軟體能力進一步“下沉”

還有一個趨勢是,我們應用本身所需要的中介軟體能力下沉。即以前的中心化的中介軟體其實在過去幾年中,已經演進到了微服務架構。


微服務架構本質上是把以前的中心化中介軟體的這一套東西拆開,放在了業務程式碼裡面,而你需要去把它引入進來使用。一般來說,會提供一個比較重的客戶端或者一個庫讓你去使用,這是我們的微服務時代典型的中介軟體的一個使用方式。但是在今天,在我們雲原生的越來越普及的這樣一個現狀下,有沒有像 Sidecar 這樣一個機制的存在?

今天的中介軟體實際上是大量的通過 Sidecar 方式去被使用到的,所以我的應用本身不需要再去引入一個庫,或者引入一個特定的框架來去做很多事情,我甚至都不需要感知。比如說我今天要去做流量的切分,我不需要說在應用裡面去引入這麼一個庫去做,而是完全交給我的基礎設施,交給雲去做。

那麼應用跟雲的互動,就通過一個叫 Sidecar 的一個旁路容器,讓這個容器去代理應用本身所需要的進出流量,所以雲就可以非常容易地通過這樣一個代理,調節流量、做流量切分,這就是非常簡單的 Service Mesh 的原理。

今天,中介軟體能力不斷通過這樣一個方式在下沉,它會帶來一個非常明顯的趨勢,即中介軟體不再與業務相關了,不再與程式的編寫語言相關了,也不需要對框架有什麼依賴。它的實現跟 K8s 容器化這套體系會非常的緊密結合。另外,我對 Sidecar 的依賴也會更多,所以說相應的對 Sidecar 的管理能力也在逐步去提高要求。我們可以把它總結為應用中介軟體能力的進一步下沉。

層出不窮的雲原生服務

除此之外,伴隨著雲原生整套體系的不斷髮展,我們會看到,雲服務在大量的、頻繁地向雲原生生態去靠攏,甚至說帶來一些革命性的影響。


比如說,今天阿里雲的雲原生資料庫,它實際上就是基於雲原生提到的核心的思想理念,比如說無限彈性、高度可擴充套件,提出了一個全新的資料庫架構,使得資料庫的本身非常容易去擴充套件,能夠去應付極高的、極為苛刻的流量和海量的資料處理需求,滿足今天現代網際網路應用的資料庫使用的訴求。

再比如說阿里雲基礎設施,它能夠給我們帶來極致的資源使用效率,減少了很多層的虛擬化的效能損耗,讓容器本身具有彈性,非常容易地去運維部署和管理,並且通過安全容器,通過更強的安全邊界,保證容器之間的隔離,使隔離性是足夠的。它能夠為容器帶來極致的物理級別的網路儲存和計算效能,這是非常重要的,也是我們的應用通過雲原生的理念去使用雲端計算服務的一個非常典型的例子。

再比如說像亞馬遜雲科技,它讓我們的晶片本身能夠去更容易或者說更直接的去適配容器化應用的使用方式。因為一個容器可能只有一個非常獨立或者說非常模組化的一個程序在跑,那我就可以用晶片的核心去適配這樣的一個業務,把我的基礎設施的能力發揮得更強,把能力發揮到極致,同時保證像這樣的核心之間的干擾是非常少的,更適應容器化微服務的應用的使用方式。

比如亞馬遜雲科技最近推出一個雲原生應用部署引擎,它可以用我們這種完全一致的方式去部署任何的這種雲服務或者是容器服務,這都是能夠去幫助我們利用雲的能力去提升應用管理交付運維效率的一個非常典型的產品。

所以我們看這些產品也好,去看所謂開源專案也好,當我們想要去思考這樣一個問題,說我這個雲產品是不是所謂的雲原生,是不是雲原生的技術,其實非常簡單。只要判斷一下它能不能幫助我的應用最大程度地去利用雲端計算降本提效,能不能通過這樣的方式釋放最大的業務價值,這個是判斷一項技術,或者說一個產品是不是去把它定位為雲原生的一個非常核心的一個標準,而不是說去看這個產品是容器與否。

阿里巴巴雲原生化

回到我們阿里巴巴本身的例子來講,我們可以看到這麼一個事實,今天阿里巴巴的基礎設施已經基於像 Kubernetes 容器這樣整套技術,完成了我們所謂的雲原生化。而真正我們回過頭來看這樣一件事情,我們會發現其實雲原生本身給阿里巴巴自己帶來了非常重要的一些變革。

第一個我們對業務研發,通過前面講到的雲原生的思想,很好地做到了關注點分離,研發更專注於業務。通過雲原生的這種標準的交付方式,我們還提出了像雲原生標準交付的規範,去標準化地、模組化地進行可持續交付,兼顧使用者體驗和靈活度,從而大幅提升業務的研發效能,讓他們完全關注於自己的業務,不需要再去接觸到複雜的基礎設施,這個是雲原生給業務研發帶來一個最大的價值。

再比如說對大量的業務運維和 SRE 來說,雲原生體系所提供的這種敏捷運維高效運營的這套理念,以及它的技術實現,包括前面講的輕量級的容器不可變、基礎設施、高度自動化的應用本身和運維方式,都能夠讓我們今天的軟體運維變得極其簡單、極其高效,尤其相比於之前的傳統方式,基於容器的基於自動化的一個方式,能夠極高地提高我們的運維自動化程度,大量減少人工介入,提升我們操作的併發度,真正意義上的實現所謂的把複雜留給系統,把簡單留給使用者,這就是我們今天雲原生的體系。


那麼更不用說今天容器化之後,比如淘寶這類的應用,去做水平擴容和升級都是非常快捷、非常高效的,而不是說升級一下淘寶,你的手機應用就掛了,在雲原生時代這事不再會發生了。

另外一個例子是對基礎設施來說,通過阿里今天使用的神龍裸金屬的實力,加上我們的安全容器,能夠去幫助我們極大地提升今天資料中心的使用資源效率,我們叫提升資源效能。尤其是它能夠去支援我們極高密度地去部署安全容器,利用規模效應,降低資源碎片。可以去根據你的工作負載的不同形態,去放心地填資源的碎片,因為有神龍金屬所以我們能夠確保這樣做,依然有極高的業務的執行效率,同時不會互相之間有任何干擾。這些都是在今天雲原生的環境下,這項基礎設施所能夠給我們帶來的一個非常重要的一套變革,甚至說對於阿里巴巴的這樣一個組織,隨著雲原生技術的引入和發展,也帶來了一個非常好的變化,讓阿里巴巴的技術棧標準化開放,能夠跟生態無縫整合,也能夠降低研發成本,讓整個體系的可靠性和研發效率都有一個很好的提高。

而另一方面,隨著自身基礎設施的標準化,阿里巴巴的技術正在飛快地進入到開源社群當中。今天阿里巴巴是 CNCF 裡面開源專案最多的一個公司,遠遠領先於任何一個廠商和其他一些組織。這裡一個關鍵原因就在於,今天阿里巴巴的技術是跟生態無縫對接的,所以我們才能夠積極去參與這樣的一個更廣泛的開源生態,把阿里的開源技術輸出出去,甚至說這引領和影響了整個業界生態的發展過程,這個都是阿里巴巴的雲原生化之後,我們看到的實實在在的一個變化。

總結

**

如果我們回顧一下今天講的雲原生這套理念,可以發現它實際上是一套架構到技術到產品的不斷演進的過程。從架構上來講,雲原生認為軟體天然生於雲上、長於雲上,能夠最大化的利用雲的能力;另外一方面區別於傳統的模式,雲原生能夠讓開發者享受到紅利,能夠去引領它的軟體和應用本身去不斷的現代化。

而圍繞這種架構和理念,我們有一系列的技術,這裡面有開源的,有自研的,但是它背後的邏輯和思想是高度一致的。圍繞著基礎設施、應用架構、開發運維交付的場景,通過雲原生技術讓系統更加可靠,具有彈性,有更好的容錯性,並且元件之間鬆耦合易管理,可觀測性做得更好,從而充分地去把雲的能力透出來。雲原生能夠釋放雲的最大潛力,其實它的背後往往離不開雲原生本質的這套理念和技術的支援,以這些理念和架構為代表的,像容器、不可變基礎設施等等,他們其實是我們去落地雲原生裡面的一個高效的手段。

而圍繞這些手段本身,我們才有了這樣各種各樣的雲原生理念加持下的產品,包括雲原生資料庫、雲原生服務產品、中介軟體、函式計算、容器等等一系列的開放標準,能夠去彈性,能夠去利用雲的價值的,能夠去讓用通過雲本身更好的服務的應用研發運維和應用交付人員的這樣一系列的產品,那麼他們都是能夠非常明顯地區別於傳統的雲端計算服務提供的形態。

所以我們會看到未來的雲會更多地向 Service 化、SaaS 化、服務化的方式去演進,而較少地去專注在基礎設施這一層,因為我們真正的使用者關注點,其實在它的應用能否發揮最大的業務價值這個問題上面的。

未來的整個演進趨勢,它其實都伴隨著一個非常重要的點,就是說雲的能力在不斷地越變越豐富,這是非常重要的。之所以在過去,我們的整個軟體架構本身它會需要大量的,比如說傳統中介軟體,甚至一些微服務框架或者是 PaaS,去幫助我們更好地的管理軟體,它的背後非常重要的原因在於雲或者說基礎設施能力不夠強。比如說我今天就想要一個藍綠髮布的能力,而很多雲在很長一段時間內是不具備這個能力的,所以必須通過某種中介軟體或者某種框架來幫你去解決,但今天不是這樣。今天我們的雲幾乎能做到你想象到的任何一種應用所需要的管理能力,甚至應該說雲的能力其實已經幾乎要超出了我們今天軟體架構的大部分需求。所以在這種情況下,我必然不再需要一個額外的層,無論是傳統中介軟體,還是傳統的這種微服務框架或者 PaaS,去幫助彌補軟體的訴求跟基礎設施之間的鴻溝。

當這個鴻溝越來越窄,各種各樣的雲原生技術開始出現。所以任何一種雲原生技術,它不再是某種能力的彌補,而是更多地將雲的能力以某種方式更簡單、更高效地透出給我的應用去使用。無論是容器、K8s 還是 Service Mesh,他們都是在不同的環節幫助應用本身能夠更好地去使用雲服務。或者說使用到雲背後的基礎設施能力,比如說 K8s 它可以讓應用非常無感地極簡地進入到我的雲的儲存和網路當中,使用雲端計算能力;Service Mesh 通過 Sidecar 這樣完全無侵入的方式,讓你能夠使用雲的流量控制的能力來去作為微服務治理。

未來我們的整個雲計算髮展,包括雲原生背後的關注點一定也是這樣,不斷地、持續地、充分地去釋放雲端計算的基礎設施能力,到軟體的研發交付乃至整個生命週期當中,這是非常重要的一點。因為未來雲的能力一定是越來越強,伴隨這樣一個趨勢我們才會看到,雲原生一定是在逐步引領整個雲端計算生態。

原文連結

本文為阿里雲原創內容,未經允許不得轉載。