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