雲原生應用的10大關鍵屬性

「雲原生」是用於描述基於容器的環境的術語,而Kubernetes是一個運行雲原生應用程序工做負載的理想平臺。服務器

開發人員在設計雲原生應用程序時,必定要牢記本文內這10個關鍵屬性!網絡


「雲原生(Cloud Native)」是用於描述基於容器的環境的術語。雲原生技術被用於開發應用程序,這些應用程序是使用容器打包的服務構建的、被部署爲微服務、並經過靈活的DevOps流程和持續交付工做流在彈性基礎架構上進行管理。架構

在運維團隊手動管理傳統應用程序的基礎架構資源分配的狀況下,雲原生應用程序部署在抽象了底層計算、存儲和網絡原語的基礎架構上。處理這種新型應用程序的開發人員和運維人員不直接與基礎架構提供商公開的API交互。相反的,編排器會根據DevOps團隊制定的策略自動進行資源分配。控制器和調度程序是編排引擎的基本組件,負責處理資源分配問題和應用程序的生命週期。框架

像Kubernetes這樣的雲原平生臺使用扁平網絡,該網絡覆蓋在雲提供商的現有網絡拓撲和原語上。相似地,本地存儲層一般被抽象出來,以暴露與容器集成的邏輯卷。運維人員能夠分配開發人員和資源管理員訪問的存儲配額和網絡策略。基礎架構抽象不只解決了跨雲環境的可移植性需求,還讓開發人員能夠利用新興模式來構建和部署應用程序。不管基於物理服務器或虛擬機,私有云或公共雲的底層基礎架構如何,編排管理器都將成爲部署目標。運維

Kubernetes是一個運行雲原生應用程序工做負載的理想平臺。它已經成爲雲的事實上的操做系統,就像Linux是底層機器的操做系統同樣。只要開發人員在設計和開發軟件時,遵循其做爲雲原生應用程序的微服務的最佳實踐,DevOps團隊就可以在Kubernetes中打包和部署它們。如下是開發人員在設計雲原生應用程序時應牢記的雲原生應用程序的10個關鍵屬性。異步

一、打包爲輕量級容器:雲原生應用程序是打包爲輕量級容器的獨立自治服務的集合。與虛擬機不一樣,容器能夠快速擴縮容。將擴展單元轉移到容器,可以優化基礎架構利用率。微服務

二、使用最佳語言和框架開發:雲原生應用程序的每項服務都是使用最適合該功能的語言和框架開發的。雲原生應用程序是多語言的,服務會使用各類不一樣的語言、運行時和框架。例如,開發人員能夠構建基於在Node.js中開發的WebSockets的實時流服務,同時選擇Python和Flask來暴露API。開發微服務的細粒度方法使它們可以爲特定任務選擇最佳語言和框架。性能

三、設計爲鬆耦合的微服務:屬於同一應用程序的服務經過應用程序運行時來發現彼此。它們獨立於其餘服務而存在。正確集成時,彈性基礎架構和應用程序架構能夠高效地、以高性能來進行擴展。優化

鬆耦合的服務讓開發人員能夠在處理每一個服務時都可以獨立於其餘服務來工做。經過這種分離,開發人員能夠專一於每項服務的核心功能,以提供細粒度的功能。這種方法能夠實現整個應用程序的有效生命週期管理,由於每一個服務都是獨立維護的,而且擁有明確的全部權。spa

四、以API爲中心進行交互和協做:雲原生服務使用輕量級API,這些API基於REST、gRPC或NATS等協議。REST一般被用做經過HTTP公開API的最低公分母。爲了提升性能,gRPC一般用於服務之間的內部通訊。NATS具備發佈-訂閱功能,可在應用程序內實現異步通訊。

五、在架構中將無狀態和有狀態服務清晰分離:持久耐用的服務一般遵循不一樣的模式,以確保更高的可用性和彈性。無狀態服務和有狀態服務是彼此獨立存在的。存儲會影響容器的使用。咱們必須愈來愈多地在有狀態、無狀態、微存儲環境(這一點有些人可能以爲有爭議)等不一樣語境下考慮持久性這一因素。

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

七、部署在自服務的彈性雲基礎架構上:雲原生應用程序部署在虛擬的、共享的和彈性的基礎架構上。它們能夠與底層基礎架構保持一致,以動態增加和縮小——根據不一樣的負載來自我調節。

八、經過敏捷DevOps流程進行管理:雲原生應用程序的每項服務都會經歷一個獨立的生命週期,經過敏捷的DevOps流程進行管理。多個持續集成/持續交付(CI / CD)流水線能夠協同工做以部署和管理雲原生應用程序。

九、自動化功能:雲原生應用程序能夠高度自動化。它們與Infrastructure as Code的概念相得益彰。企業須要必定程度的自動化來管理大型和複雜的應用程序。

十、定義的、策略驅動的資源分配:最後,雲原生應用程序與經過一組策略定義的治理模型一致。它們遵循CPU和存儲配額以及將資源分配給服務的網絡策略等策略。例如,在企業方案中,中央IT能夠定義策略來爲每一個部門分配資源。每一個部門的開發人員和DevOps團隊都擁有對其資源共享的徹底訪問權和全部權。

相關文章
相關標籤/搜索