簡介:任何一種雲原生技術,它再也不是某種能力的彌補,而是更多地將雲的能力以某種方式更簡單、更高效地透出給個人應用去使用。不管是容器、K8s 仍是 Service Mesh,他們都是在不一樣的環節幫助應用自己可以更好地去使用雲服務。
做者|張磊 數據庫
即便「雲原生」的提出已經有一段時間,但很多人仍是會有這樣一個問題:究竟什麼是雲原生?或者說雲原生的確切定義是什麼?
安全
實際上,當咱們接觸到不少雲原生的開源技術和產品以後,會逐漸發現一個現象——雲原生本質上其實並非一個很是確切的物體。也就是說,雲原生其實不存在什麼具體定義,它指的是一個不斷演進的過程。與其談雲原生的本質,不如咱們將它理解爲一套願景。
網絡
那麼這套願景的內容又是什麼呢?
架構
在將來雲的時代,咱們的軟件或者應用是自然的生於雲上,長於雲上。之因此會出現這樣一種現象或這樣一個事實,正是由於雲計算可以最大程度地去幫助這些軟件降本提效,釋放軟件自己最大的業務價值。這纔是雲原生真正想要去作的一件事情,因此它並非某一項具體的技術,也不是某一個方法,更不是某一個具體的科研項目。
併發
下圖可以直觀地闡明雲原生總體的形態究竟是怎麼去演進和發展的。框架
雲原生很是強調利用雲的特性,因此它的核心方法論和核心概念都是圍繞如何讓咱們的軟件和應用去利用雲的特性。那麼雲的特性是什麼呢?好比說雲是可以無限彈性的、雲的資源是能夠快速交付的、雲的使用方法是能夠按量付費的,這些都是雲很是本質的特性。
運維
圍繞這些雲的特性,雲原生纔有了一套最基礎的方法論和概念。好比你們可能據說過不可變基礎設施,當個人應用部署在雲上,假設這個應用載體是不可變的,我就能夠隨時把它刪掉或替換掉,那麼要更新個人應用會很是容易。若是要升級應用,能夠直接採用刪掉舊的、上線新的方式去作,而不是說須要去動態變動應用裏面的某項配置,甚至動態更改代碼去實現。因此,不可變基礎設施就是一套很是典型的、基於利用雲的快速資源交付能力而造成的方法論。ide
再好比說,雲原生強調要高度的自動化,實現自運維甚至自愈,其實也是但願軟件自己可以去更好地利用雲的特性。由於雲的能力是很是強大的,雲可以提供各類各樣的運維能力,因此應用或者軟件可能從開發的時候,就要考慮到雲其實可以提供不少能力到應用層,而不是說先開發完應用,再去思考怎麼藉助雲的能力去運維,這樣是構建不出來雲原生應用的。模塊化
再好比說,雲原生應用無所謂用什麼語言寫,用什麼框架寫,這也是很明顯的一個特色。由於雲自己是一個基礎設施能力,那麼就不該該也不會去用某種語言或者框架去鎖定。一樣也是但願這個世界上全部的軟件都可以去利用雲的能力,而不是說雲只能服務於某種語言。函數
以上這些都是在雲的背景下,雲原生提出的一些很是重要的概念。而這些概念自己在咱們的技術研究當中就會被映射成爲一系列的系統,或者說架構思想。好比說前面提到不可變基礎設施,能夠把一個應用舊的實例刪掉換成新的實例,像這樣的一套方法怎麼去實現?就要靠容器技術。容器技術本質上提供容器鏡像,一個容器鏡像是自包含一個應用的運行環境,包括應用自己,能夠隨時把這個鏡像版本替掉,上線一個新的版本就能夠了。這其實表明着容器是不可變基礎設施的一個很是良好的實現。
那麼這是否是意味着將來會有某一種技術,可以更好地去實現不可變基礎設施呢?這是頗有可能的,而且這項技術固然也是雲原生的。當將來可能有一個新的技術去實現不可變基礎設施,或者更好地實現不可變基礎設施,那麼這樣一個技術也必定是屬於雲原生的核心範疇。與之相似的,像咱們雲原生今天強調的 Sidecar 架構,就是把中間件能力經過一個叫 Sidecar 容器的方式去對接到業務容器裏去,而不是說在業務自己上去作定製,集成中間件去解決問題。這實際上是但願可以去實踐咱們強調的與語言無關、與框架無關的這樣一套方法論所提出的一個架構。而這個架構的特色就是,中間件能力再也不須要以語言或者框架的方式嵌到業務代碼自己裏去,因此說 Sidecar 加上容器都可以去實現這樣的一套方法。
這就是雲原生方法論背後不斷推演出來的一系列技術和架構,而這些技術架構最終在雲原生生態裏面,每每是以開源的技術項目來給你們去使用的。好比說前面提到的容器就會有 Docker 上的項目,咱們提到的 Sidecar 和自運維的這套思想,最終會經過 Kubernetes 去幫你去實現。
再好比說最近比較火熱的 Service Mesh,它本質上在幫你去作中間件的能力,只不過是經過 Sidecar 這種與語言無關的方式去作;再好比說咱們將來或者說如今就已經比較火的 eBPF、WASM,他們其實都是在實踐雲原生這套體系背後的某項思想和某種架構,以開源的方式去知足讓用戶使用的場景。而正是由於有了這一系列的開源項目,咱們才能作到說當個人用戶拿到這樣的開源項目,拿到這樣的技術,他可以去真正實踐雲原生理念,從而達到咱們前面講到的這兩種雲帶來的本質效果:
第一個是提高效率,好比說研發效率、交付效率、運營效率。例如個人應用自己經過容器實現了不可變基礎設施的這樣一套理念,那麼它的交付就能夠很是簡單,我只須要作鏡像,交付鏡像後它就能夠運行在每個地方;再好比說咱們的運維,當你的軟件自己已經實現了自運維,那麼它的運維的難度和成本必定是下降的,因此咱們必定可以藉助雲的能力去提效。
第二個是下降成本,這裏包括了資源成本,也包括了人力成本。好比說經過 Kubernetes 或者說經過容器這樣的項目,個人應用能夠更好地、更多地去集成雲服務,經過雲服務來減小運維成本和人力投入,這些都是很明顯的成本下降。再好比說個人應用經過雲原生實現了上雲,又經過雲原生架構,能夠很快速地進行資源交付和更新的模式,讓整個應用的資源成本也變得很低,這一樣也是經過雲原生技術,讓應用可以更好地使用到雲的本質能力的一種很是好的體現和實踐。
整體而言,你會發現這一套雲原生的方法實際上是一個很完善的閉環,先不斷去地看、不斷地去探索如何利用雲的特性幫助用戶去提效降本,而後把這一系列的方法或者這一系列的思想,總結沉澱成爲雲原生的概念和方法論,再經過一系列相應的架構和對應的開源項目將其實現,最後再讓用戶可以去使用這些技術,從而達到釋放雲計算紅利的本質目的。
因此說雲原生它沒有一個具體的定義,它其實是一套不斷自我演進的理論體系加上最佳實踐的組合。
今天的雲原生多是圍繞着容器和 Kubernetes 來構建的,而這樣的項目實際上在幫助咱們去實踐不少雲原生背後的本質思想,包括不可變基礎設施、自動化等。今天 Kubernetes 被認爲是一個雲時代的通用控制平面,也有人把它叫作操做系統,就是說你的全部操做均可以藉助 Kubernetes 在雲上統一去完成。
一、Kubernetes 項目的「安卓化」
Kubernetes 項目的角色可能會愈來愈像一個安卓。舉一個例子,好比說今天的 Kubernetes 其實正在作到無處不在,每一個地方每一個雲層都有 Kubernetes,甚至部署在端的用戶、或者部署在邊緣的環境下都是很是正常的,就跟安卓同樣,車上也有,咱們電視裏也有,甚至空調也會有可能有一個安卓。
那麼更重要的是,用戶使用 Kubernetes 的本質目的是什麼?是交付和管理它的軟件。好比說我用 Kubernetes 必定是在上面部署了某一個東西,好比說 AI 的服務或者淘寶,用戶的本質目的是使用這套東西來管理軟件。而 Kubernetes 自己其實對上暴露的是一系列格式化的抽象,好比說 Deployment、Service、Ingress,讓我可以去管理和交付個人應用;而對下它啓動了一套標準化的接口,好比說經過 CNI 就能夠對接阿里雲網絡,對接自研網絡插件,因此它本質上是一箇中間層,即一個控制平面,接入了大量的基礎設施,而他們暴露的東西成爲了個人應用所須要的一些能力,讓我可以去用這些能力去管理應用。
那麼這樣的一個趨勢日後面不斷去研究的話,就會發現這個跟安卓特別類似。好比說安卓在手機自己實際上是不付錢,可是應用市場裏的應用是要付錢的。安卓的價值在於它把用戶的手機抽象、包裝、封裝成一系列應用可使用的 API,因此說安卓的價值和今天 Kubernetes 是徹底同樣的。
將來咱們會看到,Kubernetes 它不只會出如今各類不同的地方,更重要的是它會爲應用軟件的研發、運維、交付的全生命週期提供一系列完整的能力,讓用戶可使用它。與此同時,爲了可以更好地把軟件交付出去,咱們會發現將來還會有不少這樣的項目專門幫助你去解決軟件在 K8s 上交付的問題。與此同時,咱們之前的傳統 PaaS 會不復存在,由於它的能力已經所有被 Kubernetes 接管了,而將來會出現更多的這種開放的可擴展的 PaaS,他們的做用是讓你可以去更好地更簡單地交付和管理軟件,就像安卓上的豌豆莢,能夠很容易地去管理軟件。對於這樣一個趨勢,我把它叫作 Kubernetes 的「安卓化」。
二、應用與能力的「Operator化」
而另外一個趨勢就是,在今天雲原生的生態裏面,不管是個人應用仍是個人能力,它都會往一個很是可以自動化的方向去演進,我把它叫作 「Operator 化」。
Operator 是 Kubernetes 裏面的一個核心思想,它表明着個人任何一個應用和它所須要的能力均可以定義成爲一個 Kubernetes 的 API 對象,經過一個叫作 Controller 的機制讓你去使用雲的能力,再讓你接入到各類各樣的基礎設施裏面。這個 Operator 化帶來的一個直接結果就是,個人應用自己是高度自動化的,包括自愈、健壯性、可靠性、運行的肯定性,這些在今天均可以交給 Kubernetes去解決。個人用戶或者說我應用的 owner,不須要再關心這些問題。
那麼這也是咱們今天在 K8s 安卓化的背景下看到的另一個趨勢,就是個人應用自己和業務所須要的能力會不斷地往自動化方向去演進。這也很是符合雲原生的理念,由於你的應用自動化和自愈能力越強,你就越可以去跟雲去對接,人工須要去記錄的成本會更低,時間也會更少,更多的是把個人自動化能力跟雲去對接好,讓雲幫助我去解決全部問題。
三、應用中間件能力進一步「下沉」
還有一個趨勢是,咱們應用自己所須要的中間件能力下沉。即之前的中心化的中間件其實在過去幾年中,已經演進到了微服務架構。
微服務架構本質上是把之前的中心化中間件的這一套東西拆開,放在了業務代碼裏面,而你須要去把它引入進來使用。通常來講,會提供一個比較重的客戶端或者一個庫讓你去使用,這是咱們的微服務時代典型的中間件的一個使用方式。可是在今天,在咱們雲原生的愈來愈普及的這樣一個現狀下,有沒有像 Sidecar 這樣一個機制的存在?
今天的中間件其實是大量的經過 Sidecar 方式去被使用到的,因此個人應用自己不須要再去引入一個庫,或者引入一個特定的框架來去作不少事情,我甚至都不須要感知。好比說我今天要去作流量的切分,我不須要說在應用裏面去引入這麼一個庫去作,而是徹底交給個人基礎設施,交給雲去作。
那麼應用跟雲的交互,就經過一個叫 Sidecar 的一個旁路容器,讓這個容器去代理應用自己所須要的進出流量,因此雲就能夠很是容易地經過這樣一個代理,調節流量、作流量切分,這就是很是簡單的 Service Mesh 的原理。
今天,中間件能力不斷經過這樣一個方式在下沉,它會帶來一個很是明顯的趨勢,即中間件再也不與業務相關了,再也不與程序的編寫語言相關了,也不須要對框架有什麼依賴。它的實現跟 K8s 容器化這套體系會很是的緊密結合。另外,我對 Sidecar 的依賴也會更多,因此說相應的對 Sidecar 的管理能力也在逐步去提升要求。咱們能夠把它總結爲應用中間件能力的進一步下沉。
除此以外,伴隨着雲原生整套體系的不斷髮展,咱們會看到,雲服務在大量的、頻繁地向雲原生生態去靠攏,甚至說帶來一些革命性的影響。
好比說,今天阿里雲的雲原生數據庫,它實際上就是基於雲原生提到的核心的思想理念,好比說無限彈性、高度可擴展,提出了一個全新的數據庫架構,使得數據庫的自己很是容易去擴展,可以去應付極高的、極爲苛刻的流量和海量的數據處理需求,知足今天現代互聯網應用的數據庫使用的訴求。
再好比說阿里雲基礎設施,它可以給咱們帶來極致的資源使用效率,減小了不少層的虛擬化的性能損耗,讓容器自己具備彈性,很是容易地去運維部署和管理,而且經過安全容器,經過更強的安全邊界,保證容器之間的隔離,使隔離性是足夠的。它可以爲容器帶來極致的物理級別的網絡存儲和計算性能,這是很是重要的,也是咱們的應用經過雲原生的理念去使用雲計算服務的一個很是典型的例子。
再好比說像亞馬遜雲科技,它讓咱們的芯片自己可以去更容易或者說更直接的去適配容器化應用的使用方式。由於一個容器可能只有一個很是獨立或者說很是模塊化的一個進程在跑,那我就能夠用芯片的核心去適配這樣的一個業務,把個人基礎設施的能力發揮得更強,把能力發揮到極致,同時保證像這樣的核心之間的干擾是很是少的,更適應容器化微服務的應用的使用方式。
好比亞馬遜雲科技最近推出一個雲原生應用部署引擎,它能夠用咱們這種徹底一致的方式去部署任何的這種雲服務或者是容器服務,這都是可以去幫助咱們利用雲的能力去提高應用管理交付運維效率的一個很是典型的產品。
因此咱們看這些產品也好,去看所謂開源項目也好,當咱們想要去思考這樣一個問題,說我這個雲產品是否是所謂的雲原生,是否是雲原生的技術,其實很是簡單。只要判斷一下它能不能幫助個人應用最大程度地去利用雲計算降本提效,能不能經過這樣的方式釋放最大的業務價值,這個是判斷一項技術,或者說一個產品是否是去把它定位爲雲原生的一個很是核心的一個標準,而不是說去看這個產品是容器與否。
回到咱們阿里巴巴自己的例子來說,咱們能夠看到這麼一個事實,今天阿里巴巴的基礎設施已經基於像 Kubernetes 容器這樣整套技術,完成了咱們所謂的雲原生化。而真正咱們回過頭來看這樣一件事情,咱們會發現其實雲原生自己給阿里巴巴本身帶來了很是重要的一些變革。
第一個咱們對業務研發,經過前面講到的雲原生的思想,很好地作到了關注點分離,研發更專一於業務。經過雲原生的這種標準的交付方式,咱們還提出了像雲原生標準交付的規範,去標準化地、模塊化地進行可持續交付,兼顧用戶體驗和靈活度,從而大幅提高業務的研發效能,讓他們徹底關注於本身的業務,不須要再去接觸到複雜的基礎設施,這個是雲原生給業務研發帶來一個最大的價值。
再好比說對大量的業務運維和 SRE 來講,雲原生體系所提供的這種敏捷運維高效運營的這套理念,以及它的技術實現,包括前面講的輕量級的容器不可變、基礎設施、高度自動化的應用自己和運維方式,都可以讓咱們今天的軟件運維變得極其簡單、極其高效,尤爲相比於以前的傳統方式,基於容器的基於自動化的一個方式,可以極高地提升咱們的運維自動化程度,大量減小人工介入,提高咱們操做的併發度,真正意義上的實現所謂的把複雜留給系統,把簡單留給用戶,這就是咱們今天雲原生的體系。
那麼更不用說今天容器化以後,好比淘寶這類的應用,去作水平擴容和升級都是很是快捷、很是高效的,而不是說升級一下淘寶,你的手機應用就掛了,在雲原生時代這事再也不會發生了。
另一個例子是對基礎設施來講,經過阿里今天使用的神龍裸金屬的實力,加上咱們的安全容器,可以去幫助咱們極大地提高今天數據中心的使用資源效率,咱們叫提高資源效能。尤爲是它可以去支持咱們極高密度地去部署安全容器,利用規模效應,下降資源碎片。能夠去根據你的工做負載的不一樣形態,去放心地填資源的碎片,由於有神龍金屬因此咱們可以確保這樣作,依然有極高的業務的運行效率,同時不會互相之間有任何干擾。這些都是在今天雲原生的環境下,這項基礎設施所可以給咱們帶來的一個很是重要的一套變革,甚至說對於阿里巴巴的這樣一個組織,隨着雲原生技術的引入和發展,也帶來了一個很是好的變化,讓阿里巴巴的技術棧標準化開放,可以跟生態無縫集成,也可以下降研發成本,讓整個體系的可靠性和研發效率都有一個很好的提升。
而另外一方面,隨着自身基礎設施的標準化,阿里巴巴的技術正在飛快地進入到開源社區當中。今天阿里巴巴是 CNCF 裏面開源項目最多的一個公司,遠遠領先於任何一個廠商和其餘一些組織。這裏一個關鍵緣由就在於,今天阿里巴巴的技術是跟生態無縫對接的,因此咱們纔可以積極去參與這樣的一個更普遍的開源生態,把阿里的開源技術輸出出去,甚至說這引領和影響了整個業界生態的發展過程,這個都是阿里巴巴的雲原生化以後,咱們看到的實實在在的一個變化。
**
若是咱們回顧一下今天講的雲原生這套理念,能夠發現它其實是一套架構到技術到產品的不斷演進的過程。從架構上來說,雲原生認爲軟件自然生於雲上、長於雲上,可以最大化的利用雲的能力;另一方面區別於傳統的模式,雲原生可以讓開發者享受到紅利,可以去引領它的軟件和應用自己去不斷的現代化。
而圍繞這種架構和理念,咱們有一系列的技術,這裏面有開源的,有自研的,可是它背後的邏輯和思想是高度一致的。圍繞着基礎設施、應用架構、開發運維交付的場景,經過雲原生技術讓系統更加可靠,具備彈性,有更好的容錯性,而且組件之間鬆耦合易管理,可觀測性作得更好,從而充分地去把雲的能力透出來。雲原生可以釋放雲的最大潛力,其實它的背後每每離不開雲原生本質的這套理念和技術的支持,以這些理念和架構爲表明的,像容器、不可變基礎設施等等,他們實際上是咱們去落地雲原生裏面的一個高效的手段。
而圍繞這些手段自己,咱們纔有了這樣各類各樣的雲原生理念加持下的產品,包括雲原生數據庫、雲原生服務產品、中間件、函數計算、容器等等一系列的開放標準,可以去彈性,可以去利用雲的價值的,可以去讓用經過雲自己更好的服務的應用研發運維和應用交付人員的這樣一系列的產品,那麼他們都是可以很是明顯地區別於傳統的雲計算服務提供的形態。
因此咱們會看到將來的雲會更多地向 Service 化、SaaS 化、服務化的方式去演進,而較少地去專一在基礎設施這一層,由於咱們真正的用戶關注點,其實在它的應用可否發揮最大的業務價值這個問題上面的。
將來的整個演進趨勢,它其實都伴隨着一個很是重要的點,就是說雲的能力在不斷地越變越豐富,這是很是重要的。之因此在過去,咱們的整個軟件架構自己它會須要大量的,好比說傳統中間件,甚至一些微服務框架或者是 PaaS,去幫助咱們更好地的管理軟件,它的背後很是重要的緣由在於雲或者說基礎設施能力不夠強。好比說我今天就想要一個藍綠髮布的能力,而不少雲在很長一段時間內是不具有這個能力的,因此必須經過某種中間件或者某種框架來幫你去解決,但今天不是這樣。今天咱們的雲幾乎能作到你想象到的任何一種應用所須要的管理能力,甚至應該說雲的能力其實已經幾乎要超出了咱們今天軟件架構的大部分需求。因此在這種狀況下,我必然再也不須要一個額外的層,不管是傳統中間件,仍是傳統的這種微服務框架或者 PaaS,去幫助彌補軟件的訴求跟基礎設施之間的鴻溝。
當這個鴻溝愈來愈窄,各類各樣的雲原生技術開始出現。因此任何一種雲原生技術,它再也不是某種能力的彌補,而是更多地將雲的能力以某種方式更簡單、更高效地透出給個人應用去使用。不管是容器、K8s 仍是 Service Mesh,他們都是在不一樣的環節幫助應用自己可以更好地去使用雲服務。或者說使用到雲背後的基礎設施能力,好比說 K8s 它可讓應用很是無感地極簡地進入到個人雲的存儲和網絡當中,使用雲計算能力;Service Mesh 經過 Sidecar 這樣徹底無侵入的方式,讓你可以使用雲的流量控制的能力來去做爲微服務治理。
將來咱們的整個雲計算髮展,包括雲原生背後的關注點必定也是這樣,不斷地、持續地、充分地去釋放雲計算的基礎設施能力,到軟件的研發交付乃至整個生命週期當中,這是很是重要的一點。由於將來雲的能力必定是愈來愈強,伴隨這樣一個趨勢咱們纔會看到,雲原生必定是在逐步引領整個雲計算生態。
本文內容由阿里雲實名註冊用戶自發貢獻,版權歸原做者全部,阿里雲開發者社區不擁有其著做權,亦不承擔相應法律責任。具體規則請查看《阿里雲開發者社區用戶服務協議》和《阿里雲開發者社區知識產權保護指引》。若是您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將馬上刪除涉嫌侵權內容。