雲原生應用的十個關鍵屬性

banq發表於2018-07-24
雲原生(Cloud native)是用於描述基於容器的雲端計算環境的專門用語,雲原生技術是指開發使用容器打包的服務,部署成微服務形式,在工程方法上實現靈活的DevOps流程,在彈性的基礎架構上對持續交付的工作流進行管理。

過去,運維團隊是透過手動管理基礎資源的分配,雲原生應用則是部署在抽象底層計算、儲存和原始網路的基礎架構上。處理這種新型應用的開發人員和運維人員不會直接與基礎架構的公開API打交道,相反,基於基礎架構上的中間PaaS層會根據DevOps團隊制定的策略進行自動分配資源,這個中間PaaS層相同於一個編排引擎,它是由控制器和排程器等基本元件組成,用來處理資源分配和應用程式的生命週期。

像Kubernetes這樣的雲原生平臺暴露的是一個扁平網路,該網路覆蓋在雲提供商的現有網路拓撲和原始網路上,這如同原始儲存層是透過暴露其邏輯卷和容器整合一樣,網管可以分配開發人員和資源管理員訪問的儲存配額以及網路策略。這種基礎架構的抽象不僅解決了跨雲環境的可移植性需求,還讓開發人員利用新興模式來構建和部署應用程式。無論基於物理伺服器或虛擬機器、私有云或公共雲的底層基礎架構如何,業務流程管理器都將成為部署的目標。

Kubernetes是設計為執行雲原生應用程式的理想平臺。它已經成為雲的事實上的作業系統,就像Linux是底層機器的作業系統一樣。只要開發人員遵循微服務最佳實踐的設計開發軟體,DevOps團隊就能夠在Kubernetes中打包和部署它們,以下是針對開發人員在設計雲原生應用程式時應牢記的雲原生應用的10個關鍵屬性。

1.打包為輕量級容器

雲原生應用程式是打包為輕量級容器的獨立自治服務的集合。與虛擬機器不同,容器可以快速擴充套件和伸縮。由於擴充套件的單元轉移到容器,因此最佳化了基礎架構利用率。

2.使用最佳語言和框架開發
雲原生應用程式的每項服務都是使用最適合的語言和框架開發的。雲原生應用程式是多語言的; 服務可使用各種語言和框架。例如,開發人員可以構建基於在Node.js中開發的WebSockets的實時流服務,同時選擇Python和Flask來暴露API。開發微服務的細粒度方法使他們能夠為特定工作選擇最佳語言和框架。

3.設計為鬆散耦合的微服務
屬於同一應用程式的服務在應用執行時能夠相互發現。它們獨立於其他服務而存在。當正確整合時,彈性基礎架構和應用程式架構可以透過高效和高效能進行擴充套件。
鬆散耦合的服務允許開發人員獨立於另一個服務處理每個任務,透過這種分離,開發人員可以專注於每項服務的核心功能,以提供細粒度的功能。這種方法可以實現整個應用程式的有效生命週期管理,因為每個服務都是獨立維護的,並且擁有明確的所有權

4.以API為中心進行互動和協作
雲原生服務使用輕量級API,這些API基於代表性狀態轉移(REST),Google的開源遠端過程呼叫(gRPC)或NATS等協議。REST是被用作透過超文字傳輸​​協議(HTTP)公開API的最終共識。為了提高效能,gRPC通常用於服務之間的內部通訊。NATS具有釋出/訂閱功能,可在應用程式內實現非同步通訊。

5.以無狀態和有狀態服務的清晰分離為基礎構建
無狀態服務應該獨立於有狀態服務,有資料庫持久操作的有態服務應遵循不同的模式,以確保更高的可用性和彈性。

6.與伺服器和作業系統依賴關係隔離
雲原生應用程式與任何特定作業系統或單個計算機沒有關聯,它們在更高的抽象級別上執行。唯一的例外是微服務需要某些功能,包括固態驅動器(SSD)和圖形處理單元(GPU),這些功能可能由一部分機器專門提供。

7.部署在自助服務、彈性雲基礎架構上
雲原生應用程式應部署在虛擬、共享和彈性基礎架構上。它們可以與底層基礎架構保持一致,以動態方式增長和縮小 - 根據不同的負載調整自身。

透過敏捷DevOps流程進行管理
雲原生應用程式的每項服務都經歷一個獨立的生命週期,透過敏捷的DevOps流程進行管理。多個持續整合/連續交付(CI / CD)管道可以協同工作以部署和管理雲原生應用程式。

9.自動化功能
雲原生應用程式可以高度自動化。它們與將基礎設施作為程式碼的概念相得益彰。實際上,僅需要一定程度的自動化可以簡化管理大型和複雜的應用程式。

可定義的、能夠實現策略驅動的資源分配
最後,雲原生應用程式與透過一組策略定義的治理模型保持一致。它們遵循諸如中央處理單元(CPU)和儲存配額以及將資源分配給服務的網路策略等策略。例如,在企業方案中,中央IT可以定義策略以為每個部門分配資源,每個部門的開發人員和DevOps團隊都擁有對其資源共享的完全訪問權和所有權。


10 Key Attributes of Cloud-Native Applications - T

相關文章