當前位置: 妍妍網 > 碼農

簡單聊聊雲原生

2024-03-19碼農

雲原生,作為一種新興的軟體架構模式,目的在推動應用程式的敏捷開發、快速部署和可靠執行。雖然這一概念已經提出多年,但直至最近幾年,雲原生才逐漸引起了華中區客戶的廣泛關註和認知(不一定準確,從我的感覺和經驗來看是這樣的)。

本文結合我收集整理的資料、以及我的理解,來看看雲原生是怎麽回事?

概念

要搞清一個技術,先從概念開始,跟雲原生這個概念有關的主要有兩個組織: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)流程,能夠使新功能、更新和修復迅速地交付給使用者。這提高了開發團隊的效率,縮短了產品上線周期,有助於企業更快速地響應市場變化。

  • 最後

    我們在了解雲原生概念、開發雲原生套用的時候,一定要能真正去解決業務痛點,享受雲原生帶來的好處,比如說對程式進行微服務改造,那麽我們是不是應該事先考慮下改造的成本、改造後帶來的好處和帶來的問題,綜合權衡後再做決定。

    InfoQ 上有篇文章就是一個反例,亞馬遜 Prime Video 團隊從微服務轉變為單體,反倒成本降低 90% ,有興趣的可以看看:https://www.infoq.cn/article/NU2Y3XiazG1cqiaNoXXa