簡單聊聊云原生
云原生,作為一種新興的軟件架構模式,目的在推動應用程序的敏捷開發、快速部署和可靠運行。雖然這一概念已經提出多年,但直至最近幾年,云原生才逐漸引起了華中區客戶的廣泛關注和認知(不一定準確,從我的感覺和經驗來看是這樣的)。
本文結合我收集整理的資料、以及我的理解,來看看云原生是怎么回事?
概念
要搞清一個技術,先從概念開始,跟云原生這個概念有關的主要有兩個組織:Pivotal 和 CNCF 。
- Pivotal:Pivotal 成立于 2013 年 4 月,由 EMC、VMware 和 GE 投資成立,專注于幫助企業在數字化時代變革所需的 PaaS 云計算、大數據基礎平臺和平臺上的極限編程。
- CNCF:CNCF(Cloud Native Computing Foundation,云原生計算基金會)是 Linux 基金會旗下的基金會,可以理解為一個非盈利組織,成立于 2015 年 12 月 11 日。
2015 年,來自 Pivotal 公司的技術產品經理 Matt Stine,首次提出了云原生的概念,認為云原生架構必須包含下面一些特性:
符合十二要素、微服務、敏捷基礎設施、基于 API 的協作、抗壓性
2017 年,Matt Stine 在接受 InfoQ 采訪時,將云原生特性做了些調整:
模塊化、可觀測性、可部署性、可測試性、可處理性、可替換性
而現在的云原生涉及到的一些關鍵詞有,原文可以參考:https://tanzu.vmware.com/cloud-native:
微服務、DevOps、容器、服務網格、CI/CD、Serverless
可見,云原生的定義是在不斷演進的,不斷會有新的東西加入。
再來看看 CNCF 的官方最早是怎么定義的:
Cloud native computing uses an open source software stack to deploy applications as microservices, packaging each part into its own container, and dynamically orchestrating those containers to optimize resource utilization.
云原生使用一種開源軟件技術棧來部署微服務應用,將每個組件打包到它自己的容器中,并且通過動態編排來優化資源的利用率。
2018 年,CNCF 推出了對云原生定義的 v1.0 版本,地址如下:
https://github.com/cncf/toc/blob/main/DEFINITION.md
云原生技術有利于各組織在公有云、私有云和混合云等新型動態環境中,構建和運行可彈性擴展的應用。云原生的代表技術包括容器、服務網格、微服務、不可變基礎設施和聲明式API。
這些技術能夠構建容錯性好、易于管理和便于觀察的松耦合系統。結合可靠的自動化手段,云原生技術使工程師能夠輕松地對系統作出頻繁和可預測的重大變更。
云原生計算基金會(CNCF)致力于培育和維護一個廠商中立的開源生態系統,來推廣云原生技術。我們通過將最前沿的模式民主化,讓這些創新為大眾所用。
云計算和云原生的關系
早些年,傳統的企業軟件開發是部署在企業的內部物理機中,為了讓一個系統能正常運行,通常需要很多的機器,數據庫、中間件、程序的前后端都需要進行單獨部署。
后來有了虛擬化技術,通過在各種實體資源(CPU、內存、網絡、存儲等)之上構建一個邏輯層,從而擺脫物理限制的約束,提高物理資源的利用率。最直觀的感受就是可以在一臺物理機上快速運行多個虛擬機、意味著可以降低物理機的數量,節約成本。
虛擬技術的成熟促成了云計算的出現。2006 年 Google 首次提出了云計算的概念。云計算出現之后,就慢慢出現了 XaaS :
- IaaS(基礎設施即服務):一種云計算服務類型,它按即用即付的方式按需提供必要的計算、存儲和網絡資源。這種服務模式幫助客戶降低維護成本和硬件成本。
- PaaS(平臺即服務):云計算服務模式之一,它為開發人員提供了包括一系列開發工具、服務、應用程序接口(API)等資源的平臺。它的目標是讓開發者能夠更快速、高效地構建、發布、擴展和維護應用,同時云服務商負責管理和提供開發環境。
- aPaaS(應用平臺即服務):是一類特定的 PaaS,重點在于為應用程序提供更快捷的構建服務,例如低代碼能力。通常包括通過可視化操作減少原生代碼使用、高效的數據處理、模塊化的功能實現等,目的是為了讓開發者更高效地搭建、運行、維護和擴展應用。
- DaaS(數據即服務):將數據從靜態資源轉變為一種可通過網絡獲取的即時服務。用戶可以方便地訪問和使用數據,無需關心數據存儲和管理的底層細節。數據通過平臺進行集中化管理,提供規范化、標準化的數據訪問和數據處理流程。
- FaaS(函數即服務):是一種基于事件驅動的無服務器執行模式,在這種模式中,開發人員無需關心服務器的管理和維護,只需編寫并上傳業務函數代碼。當觸發特定事件時,這些代碼由云服務商在全托管的環境中執行。
- SaaS(軟件即服務):一種云計算模式,在這種模式中,軟件通常以網絡瀏覽器的形式提供給用戶。用戶不需要在本地機器上安裝或維護軟件,所有的應用程序和數據庫都位于云端的數據中心。這減少了用戶在軟件和硬件方面的投入和維護工作。
云計算的興起,一些企業將軟件逐漸遷移到公有云,無需再關心網絡、存儲、服務器等,這些都由云廠商的 IaaS、PaaS 能力提供。
但是,也只能說是將應用遷移到了云端,只是軟件運行的平臺和運維體系發生了變化,軟件的架構和業務形式并沒有發生大的變化。部署到云端的應用并沒有將云的特性展現出來,原因是因為這些應用大多都是傳統的單體架構,在靈活性擴展性上都有很大的局限性。所以說,這還不是真正的云原生應用。
要做到真正的云原生應用,程序需要做一定的改造,要能適配容器化部署和編排;要能像微服務應用一樣快速響應、動態伸縮;要能適配各種云端的中間件等。
云原生使用了云計算的能力,云計算提供了強大的基礎設施和計算資源,為云原生的發展提供了基礎,而云原生則通過優化應用程序的架構和管理方式,更好地利用云計算的優勢。它們之間是相輔相成的。
云原生的好處
從上面的介紹中也可以看出,云原生終極目的就是可以省各種成本,比如:開發成本、運維成本、硬件成本、維護成本等。
之所以可以省成本,主要得益于以下幾個方面的設計和實踐:
- 容器化: 通過容器化應用程序,將應用程序及其依賴項打包成輕量級、可移植的容器,使得它們更易于部署和擴展。
- 容器編排: 自動化部署和容器編排工具(如Kubernetes)可以快速、動態地調整應用程序實例的數量,為流量和負載的變化提供響應,從而提高了彈性和可伸縮性。
- 微服務架構: 云原生架構通常采用微服務架構,它將應用程序拆分為一組小型的、獨立部署的服務,使得每個服務都可以獨立擴展和調整,為系統整體提供了更強的彈性。我理解的微服架構務并不一定是物理上的拆分,如果能實現邏輯上的拆分,即便物理上仍然是一個單體,也是具備可伸縮性、靈活性的。
- 動態資源調度: 云原生架構允許動態調度資源,根據需求分配計算資源,以滿足應用程序的需求,從而提高了資源利用率,同時提供了更好的彈性。
- 快速交付和持續部署:云原生架構支持自動化的持續集成和持續交付(CI/CD)流程,能夠使新功能、更新和修復迅速地交付給用戶。這提高了開發團隊的效率,縮短了產品上線周期,有助于企業更快速地響應市場變化。
最后
我們在了解云原生概念、開發云原生應用的時候,一定要能真正去解決業務痛點,享受云原生帶來的好處,比如說對程序進行微服務改造,那么我們是不是應該事先考慮下改造的成本、改造后帶來的好處和帶來的問題,綜合權衡后再做決定。