云原生:軟件交付的未來
Hello folks,我是 Luga,今天我們來聊一下云原生生態(tài)本質(zhì)之一—— 高效交付,即 “基于 Cloud Native 生態(tài)理念進行應用程序軟件的高效交付” 。
國慶節(jié)前,我非常榮幸地獲得來自 Jakarta EE 中文社區(qū)組織發(fā)起者劉志杰老師的邀請,參與了一次 JakartaOne Livestream 活動,并進行了一次簡單而充實的技術分享。JakartaOne Livestream 是 Jakarta EE 工作組 面向開發(fā)人員及技術負責人的線上會議,主要關注企業(yè)級 Java 應用云原生技術,探討 Jakarta EE 技術發(fā)展現(xiàn)狀及未來趨勢。
與此,基于上次的技術交流以及最近的一些思考,簡單的談談自己對“Cloud Native”的“一丟”看法。
1.我們該如何看待 Cloud Native ?
其實,Cloud Native 概念雖然并不新鮮,已經(jīng)出現(xiàn)有一段歷史了,但卻在最近的幾年來引起了廣泛的討論和關注。
從本質(zhì)上講,Cloud Native 是一種構(gòu)建和運行應用程序的方法論,旨在充分利用云計算的分布式計算優(yōu)勢。通過采用云原生的理念,開發(fā)人員可以更好地利用云平臺提供的彈性、可擴展性、彈性和靈活性。
根據(jù)云原生計算基金會(CNCF)官方的定義,Cloud Native 技術使組織能夠在公共云、私有云和混合云環(huán)境中構(gòu)建和運行可擴展的應用程序?,F(xiàn)代復雜應用程序的生態(tài)系統(tǒng)需要持續(xù)創(chuàng)新和前所未有的響應能力,因此,業(yè)務系統(tǒng)需要更具戰(zhàn)略性和高度靈活性。云原生的方法可以幫助企業(yè)變得更加敏捷,并滿足不斷增長的客戶期望。
通常而言,Cloud Native 技術利用容器、服務網(wǎng)格、微服務、不可變基礎設施和聲明式API等功能。通過使用這些功能,可以構(gòu)建具有彈性、可管理和可觀察性的松散耦合系統(tǒng)。容器化技術提供了輕量級和可移植的環(huán)境,使應用程序可以在不同的云環(huán)境中部署和遷移。服務網(wǎng)格可以提供強大的服務間通信和治理能力,確保應用程序的可靠性和安全性。微服務架構(gòu)使應用程序可以根據(jù)需求進行模塊化和獨立部署,從而實現(xiàn)更高的靈活性和可擴展性。不可變基礎設施的概念強調(diào)使用自動化工具和流程來管理基礎設施的狀態(tài),確保環(huán)境的一致性和可重復性。聲明式API使開發(fā)人員能夠通過聲明所需的狀態(tài)和配置,而不是編寫詳細的步驟和指令,從而簡化了應用程序的部署和管理。
從本質(zhì)上來講,Cloud Native 方法使工程師能夠以最小的努力頻繁地進行高影響力的更改。通過使用 Cloud Native 技術,開發(fā)人員可以更快地推出新功能、快速響應反饋和市場變化,并實現(xiàn)持續(xù)交付和持續(xù)部署的實踐。這種敏捷性和靈活性使組織能夠更好地適應不斷變化的業(yè)務需求,并提供更高質(zhì)量的應用程序和更好的用戶體驗。
2.當某一項技術被定義為 Cloud Native 時,即意味著什么?
Cloud Native 應用程序是以獨立的服務形式存在的,它們被打包為輕量級、獨立的容器。這些應用程序具有便攜性,并且能夠高度擴展(輸入和輸出)。通過將應用程序及其依賴項都包含在容器中(例如 Docker),Cloud Native 應用程序?qū)崿F(xiàn)了與基礎設施的隔離。這種隔離的好處在于容器化應用程序可以在任何具備運行時引擎的環(huán)境中進行部署。在這里,需要特別注意的是,Kubernetes 作為容器編排工具,負責管理容器的生命周期。
Cloud Native 應用程序的交付過程借助于持續(xù)集成和持續(xù)交付工具鏈的 DevOps 管道。這意味著應用程序的開發(fā)、測試和部署過程高度自動化,并通過持續(xù)集成和持續(xù)交付的實踐,實現(xiàn)快速、可靠的交付。持續(xù)集成確保開發(fā)人員的代碼變更與主干代碼集成,并通過自動化的構(gòu)建和測試流程進行驗證。持續(xù)交付則將經(jīng)過測試的應用程序交付給部署環(huán)境,以便進行進一步的集成測試和部署。
通過采用 Cloud Native 應用程序的開發(fā)和交付方式,組織能夠更好地利用云計算的優(yōu)勢。Cloud Native 應用程序的容器化使得應用程序能夠在不同的環(huán)境中無縫運行,而不受底層基礎設施的限制。這種可移植性和可擴展性使得應用程序的部署和擴容變得更加靈活和高效。同時,通過持續(xù)集成和持續(xù)交付的實踐,開發(fā)團隊能夠更快地推出新功能,快速響應市場需求,并持續(xù)提供高質(zhì)量的應用程序。
3.CNCF 及其家族成員看 Cloud Native 的發(fā)展
眾所周知,云原生計算基金會(CNCF)是由 Linux 基金會于 2015 年啟動的項目,旨在推動容器技術及其應用的發(fā)展。它與 Kubernetes 一同創(chuàng)立,Kubernetes 是一個由 Google 貢獻給 Linux 基金會的開源容器編排平臺。自那時起,CNCF 成為許多最快發(fā)展的開源項目(如 Kubernetes、Prometheus 和 Envoy)的供應商中立的托管機構(gòu)。
Kubernetes 等 CNCF 項目迅速被廣泛采用,并得到了廣泛的社區(qū)支持,使它們成為開源歷史上發(fā)展最快的項目之一。CNCF 社區(qū)匯集了全球最優(yōu)秀的開發(fā)人員、用戶和供應商,同時還舉辦一些規(guī)模最大的開源開發(fā)者會議。
CNCF 在推動 Cloud Native 技術的發(fā)展方面發(fā)揮著重要作用。Cloud Native 技術包括容器化、微服務架構(gòu)、聲明式 API 和自動化管理等,它們提供了構(gòu)建和運行可擴展、彈性和高度可靠的應用程序的方法。作為供應商中立的組織,CNCF 致力于促進云原生技術的標準化和推廣,使更多的開發(fā)者和組織能夠受益于這些先進的技術。
其中,Kubernetes 作為 CNCF 的明星項目,成為了容器編排和集群管理的事實標準。它提供了豐富的功能和可擴展性,使得應用程序的部署、擴展和管理變得更加簡單和高效。Kubernetes 的快速發(fā)展不僅得益于其強大的功能,還得益于 CNCF 社區(qū)的積極貢獻和支持。同時,Prometheus 作為一個強大的監(jiān)控和告警系統(tǒng),以及 Envoy 作為一個高性能的邊緣和服務代理,也是 CNCF 項目中備受關注和廣泛應用的技術。
4.從開發(fā)語言看 Cloud Native 的發(fā)展
當從開發(fā)語言的角度看云原生的發(fā)展時,Go、Rust 和 Java 等編程語言都在不同程度上對 Cloud Native 應用程序的構(gòu)建和交付提供了支持。
當我們打開 CNCF 相關巨幅時,我們可以看到:
圍繞 Go、Rust 語言開發(fā)的組件套件幾乎占了絕大部分。為此,我們可以毫無夸張地說,Go 和 Rust 語言儼然已成為云原生開發(fā)的主導語言。
雖然,Java 作為一種傳統(tǒng)的編程語言,在 Cloud Native 時代也在不斷演變、調(diào)整和適應。盡管 Java 的市場份額不如前兩者,但是 Java 在 Cloud Native 領域仍然具有很強的競爭力。
根據(jù)市場發(fā)展趨勢,大約 63% 的具有核心競爭力的云原生項目基本上都是使用 Go 語言構(gòu)建,這足以證明了 Go 在 Cloud Native 領域的地位。不過,Java 也在逐步適應 Cloud Native 時代的需求。例如,在 JDK 8u191 和 JDK 10發(fā)布后,JVM 被賦予了增強的容器資源感知能力,這使得 Java 應用程序在容器中的運行更加高效和可靠。 同時,Java 社區(qū)也在不斷探索Java技術棧的邊界。例如,VM OpenJ9 不僅高度兼容現(xiàn)有的 Java應用程序,而且大大加快了啟動速度并減少了內(nèi)存占用。Micronaut 和 Graal VM 則開辟了新的領域,通過改變編程模型和編譯過程,在編譯時更早地處理應用程序的動態(tài)特征,從而顯著縮短應用程序的啟動時間。這些技術對于 Serverless 架構(gòu)領域來說非常有前景,其設計理念也值得其他語言的開發(fā)者們借鑒。
與此同時,Eclipse 基金會 Jakarta EE 工作組發(fā)布了 Jakarta EE 10 標準,標志著 Java 也要分享云原生時代的“羹”。Jakarta EE 10 是一個重要的版本,引入了用于構(gòu)建現(xiàn)代、簡化和輕量級云原生 Java 應用程序的功能,是在現(xiàn)代微服務和容器時代牢牢嵌入Jakarta EE 的“終極里程碑版本”。Jakarta EE 10 的發(fā)布反映了全球貢獻者社區(qū)的工作成果,這將為 Java 在云原生領域的發(fā)展帶來關鍵的創(chuàng)新和機遇。Jakarta EE 10 的定位是開放的、社區(qū)驅(qū)動的創(chuàng)新,將推動云原生 Java 技術的未來發(fā)展。
在 Cloud Native 時代,為了提高研發(fā)協(xié)作效率,我們必須有效地拆分和重組橫向應用開發(fā)生命周期中的開發(fā)、交付和維護流程。此外,還需要在整個垂直軟件技術堆棧的編程模型、應用程序運行時和基礎架構(gòu)方面對系統(tǒng)進行優(yōu)化,以實現(xiàn)根本性簡化并提高系統(tǒng)效率。
在 Cloud Native 的生態(tài)系統(tǒng)中,以 Go、Rust 以及 Java語言為代表的編程主力軍都在積極布局自己的云原生生態(tài),構(gòu)建了各自的技術堆棧,以滿足日益復雜的市場業(yè)務需求,并為云原生時代的發(fā)展做出了貢獻。
5.Cloud Native 對技術人員的影響
在實際的業(yè)務場景中, Cloud Native 對技術人員提出了更高的要求,需要他們具備廣泛的技術知識和能力,并具備快速學習和適應變化的能力。具體影響可參考如下所示:
1、思維方式的轉(zhuǎn)變
Cloud Native 對技術人員的思維方式提出了新的挑戰(zhàn)。傳統(tǒng)的應用開發(fā)和部署模式與云原生的理念有所不同。技術人員需要轉(zhuǎn)變?yōu)橐苑諡橹行牡乃季S方式,注重彈性、可伸縮性和可觀測性。他們需要更加關注應用程序的可管理性和可維護性,將故障處理和容錯設計作為開發(fā)過程的重要組成部分。
2、架構(gòu)和設計模式的認知
Cloud Native 要求應用程序以微服務的方式進行組織和設計,將功能模塊拆分成獨立的、可獨立部署和擴展的服務。這需要技術人員具備良好的架構(gòu)和設計思維,能夠設計出高度可伸縮、彈性和可靠的微服務架構(gòu)。技術人員需要考慮服務之間的通信、服務發(fā)現(xiàn)、負載均衡、故障恢復等方面,并設計出適應大規(guī)模分布式環(huán)境的解決方案。
3、學習意識的培養(yǎng)
Cloud Native 引入了一系列新的技術和工具,如容器化、編排平臺、微服務架構(gòu)、自動化管理等。技術人員需要學習和掌握這些新技術,以適應云原生應用程序的開發(fā)和部署需求。他們需要了解容器技術(如 Docker)、容器編排平臺(如 Kubernetes)、服務網(wǎng)格(如 Istio)等,以及相關的監(jiān)控、日志和安全工具。這要求技術人員不斷學習和更新自己的技術棧,以適應快速發(fā)展的云原生生態(tài)系統(tǒng)。
與此同時,Cloud Native 也為技術人員提供了更多的機遇和挑戰(zhàn),他們可以參與到開源社區(qū)中,貢獻代碼、分享經(jīng)驗,并與全球的技術專家和開發(fā)者進行交流與合作,共同推動云原生技術的發(fā)展和創(chuàng)新。