雲原生的架構的目標是解決特定的業務場景問題,隨著雲原生架構技術不斷的進步,雲原生的落地形式與能力邊界也在不斷演進中,為了更好讓大家理解雲原生,我們首先了解雲原生的設計原則有哪些:
1.去中心化原則
去中心化是分佈式系統設計的首要原則,目的是為了保證良好的線性擴展能力,避免單點故障,對於系統的服務能力,隨著資源加入,微服務的性能和容量能夠呈線性擴展。在微服務場景下,每個服務可以獨立採用自己的技術方案或技術棧,每個微服務應用獨立部署,服務之間進程隔離,每個服務都有獨立的數據庫,一個服務實例的失效不會導致大規模的故障。這也是微服務架構和SOA非常重要的區別之一。SOA一般有一箇中心化的企業服務總線負責所有服務的註冊發現以及調用路由; 微服務架構雖然也有一個服務註冊中心,但服務註冊中心只負責應用啟動或者狀態變更時做服務推送,真正在運行過程中微服務之間的相互調用都是點對點直接調用,即運行時是去中心化的。
2.松耦合原則
松耦合原則包含:實現的松耦合,是基本的松耦合,可以自由切換到其他服務;時間的松耦合典型的是異步消息隊列系統;位置的松耦合可以通過註冊中心查找服務來訪問;版本的松耦合不依賴任何一個版本工作,要求在升級是保持兼容性。
3.面向失敗設計原則
面向失敗設計(design for failure)是為了保證系統的穩定性和高可用性,所有外部的信息輸入、硬件基礎設施服務以及系統間依賴的調用都可能發生異常,因此在設計服務時,應充分考慮異常情況,從使用者的角度出發,能夠容忍故障的發生,最小化故障的影響範圍。
應用系統的每一個層面都要考慮在系統架構設計中,任何一個層面都可能出現故障,所以應用系統架構設計上消除單一故障點,從而實現高可用性(HA)的系統架構。
4.無狀態化原則
無狀態是雲原生應用服務設計的要求,業務流量在高峰期或者低峰期都具有自主擴展性,自動彈性擴容、縮容,滿足業務需求。無狀態指的是服務在處理請求時,不依賴除請求本身以外的其他內容,也不會有除響應請求之外的額外操作。添加負載均衡幫助服務節點進行橫向擴展。實現無狀態的過程,有以下兩種方式:
(1)狀態分離∶服務端所有的狀態信息統一保存在外部獨立的分佈式存儲中(如緩存、消息隊列、數據庫)。
(2)請求附帶全部狀態信息∶將狀態信息前置,豐富請求的入參,將需要處理的數據儘可能都通過上游的客戶端放到入參中傳過來。
5.不變性原則
容器鏡像技術實現了可編程的運行環境,實現了應用與運行環境的解耦,作為一種服務(laaS),雲原生基礎設施提供可編程式的需求描述,並實現記錄版本變更,保證環境的一致性。根據軟件生命週期管理開發人員可以根據情況進行構建不同的基礎設置,在基礎設置部分的任何一個服務和組件的安裝都是自動化的,不需要人工進行安裝。資源的使用根據業務需求隨時增減,通過API方式提供彈性、按需的計算、存儲能力。
6.自動化驅動原則
因業務需求變動頻繁,可以通過快速迭代的方式,保證產品隨時發佈上線。持續集成、持續部署、持續交付是自動化驅動的重要原則,以保證需求、開發、迭代和快遞的部署到生產環境中,隨著應用服務的增多,運維工作增加,成本增加,這就要求我們在進行服務劃分的時候,優先構自動化的環境和工具,簡化開發、測試、部署、運維的流程,使用自動化工具完成以上步驟。
梯度自動化運維包含作業編排、腳本倉庫、文件倉庫、補丁倉庫、執行記錄、定時任務、SQL執行、遠程終端等功能,梯度運維管理平臺的自動化運維層,管理運維代理服務和執行具體任務分發動作。通過遠程 SSH、RDP等方式訪問服務器設備執行腳本執行、文件分發、文件採集、補丁分發、SQL執行、自動化配置、巡檢及安全基線管理等操作。可通過圖形化流程對運維任務進行靈活編排和定時執行。
運維運維自動化最直接的作用是節約成本,特別是節約人力成本,不斷提高運維效率,間接的成本受益是把很多運維經驗固化成平臺的經驗,從而減少了整個交付鏈上的文檔化內容的輸出。