“云原生”和云原生應用的價值究竟是什么?

云原生應用,就是天生具備云計算基因,以云計算的思想構建并適用于云計算環(huán)境的應用。它應該具備我們提到的特性:可以通過網絡訪問、遠端部署執(zhí)行、可擴展彈性伸縮、共享、按需使用自主服務、高可用、可遠程監(jiān)控計費審計、標準化交付與位置無關等。

“云原生”是云計算中很重要的一個概念,不過對“云原生”的認識和解讀各有側重。我們覺得云原生圍繞的是“云原生應用”這個核心,微服務、容器、DevOps等是實現云原生的工具和方法論,它們并不等價。澄清概念、厘清認知,是推動“云原生應用”落地實踐的基礎。

初次聽到“云原生(Could Native)”的時候也是一頭霧水,對云原生的十二要素也是不理解。隨著項目的推進,對云計算理解的越來越多,也有了一些自己的體會,再次看云原生的概念的時候,有了新的認知。也總是看到很多人討論云原生,有人說云原生是構建和運行應用程序的方法;有人說云原生是一套技術體系和方法論;有人說云原生應用;有人說云原生架構;也有人說云原生就是是持續(xù)交付、微服務、容器、DevOps等等不一而足。不能說是錯的,也不能說對,不同的人所說的根本不在一個頻道上。我們一向強調從整體上、全面的看待問題,不要有選擇的只看一點。我們覺得很多人都或多或少的忽略了云原生的核心實質:Native。

一、云原生(Cloud Native)

云原生概念到底是什么?

我們覺得對于新技術首先最重要的就是弄清楚它的概念和適用場景。先看Native在英語中的意思:天然的、天生的、本國的、土著的。Cloud Native就是天生的云,就是天生就具備云的基因,適合云環(huán)境。就像美國人的native language是English一樣,不是說美國人改變了國籍加入了其他國家的國籍,其native language就變了,native是一輩子都不會變的。

其核心是云原生應用,范圍包括云原生應用生命周期過程的理論、工具和方法。云原生十二因素是判斷是否是云原生的基本原則,也是實現云原生應用的基本理論指導(雖然這些因素并不完全準確)。至于持續(xù)交付、容器、微服務、DevOps是實現云原生應用或服務的方法、工具框架和環(huán)境支持。不是采用所謂的微服務、容器技術、DevOps就是云原生了,那只不過是一種實現方式而已。沒有它們,換其他工具方法同樣可以實現云原生。即便有了它們,用了它們也不一定就是云原生。

二、云原生所應具備的特性

首先要明白云原生要具備云的天然基因,天生就是云的一部分。云原生不是為云而生,而是天生就是云,生而是云,所以它具有云的特性:通過網絡訪問、遠端部署執(zhí)行、可擴展彈性伸縮、共享、按需使用自助服務、高可用、可遠程監(jiān)控計費審計、標準化交付與位置無關等。

云原生十二因素中,基準代碼是為共享;依賴、配置、后端服務、管理進程是自治自主服務范疇;構建、發(fā)布、運行以及端口綁定是標準化交付與位置無關范疇;端口綁定也是遠程訪問范疇;進程、并發(fā)是擴展彈性要求;易處理是高可用要求;日志是監(jiān)控計費審計需求,作為事件流則是云應用與位置無關要求。

云原生十二因素雖然提出了云原生應用的大部分特性,但并沒有明確云原生到底是什么?討論云原生的時候到底該討論什么?

三、討論云原生該關注什么?

我們在討論云原生的時候到底該關注什么?是架構?體系?或是方法?

我們覺得討論云原生最重要的是討論云原生應用。這是所有討論云原生的核心。云原生架構是云原生應用的架構,云原生方法論是實現云原生應用的方法論,云原生程序就是云原生應用,云原生體系就是構建、發(fā)布、運行云原生應用的理論、方法、工具、環(huán)境、流程、文化等等。最終目的是為了業(yè)務應用。云原生要素中第一條就是“一份基準代碼,多份部署”,也已明確了是云原生應用。

應用可以是天生具備云基因,適合部署于云環(huán)境,或者通過改造之后適合云計算環(huán)境,但改造的應用不是云原生應用,因為它不是天然的云應用。云原生應用也不是為了遷云,傳統應用改造為云應用才是為了遷云。這是我們在討論云原生的時候需要厘清楚的概念,不能混為一談。概念不清就會越談越亂,越談越糊涂。

四、云原生應用

云原生應用,就是天生具備云計算基因,以云計算的思想構建并適用于云計算環(huán)境的應用。它應該具備我們提到的特性:可以通過網絡訪問、遠端部署執(zhí)行、可擴展彈性伸縮、共享、按需使用自主服務、高可用、可遠程監(jiān)控計費審計、標準化交付與位置無關等。有人說輕量、無狀態(tài)是不是云原生的特征?我們并不認為是。輕量、無狀態(tài)是容器的特征,容器非常適合部署微服務應用,但微服務應用并不一定是云原生應用。

應用云原生思想,可以采用微服務架構、容器、DevOps等技術構建輕量、無狀態(tài)的云原生應用,使應用具備云端部署、可遠程訪問、彈性、共享、按需自助服務、高可用、與位置無關等特征,使之天生就具備云的基因,適合云環(huán)境部署運行。云原生十二因素更多的也是從構建云原生應用的角度討論的。

(一)彈性

彈性是云計算的重要特征,理論上不受資源限制,可以無限占用資源(當然需要按使用量付費)。容器之所以和云原生扯上關系,因為彈性也是容器的重要特征,采用容器很重要的是其彈性能力。彈性包括彈性使用資源和服務實例彈性擴展能力。在單實例擴展資源達到瓶頸,則配合負載均衡機制實現容器實例的彈性擴展。我們談論云原生應用彈性,應該包括應用使用資源的彈性和應用實例彈性擴展的彈性。

(二)共享

云計算分三種類型:IaaS、PaaS、SaaS,這就涉及三個層級的共享:資源共享、平臺共享、應用共享。云原生應用是SaaS層服務,部署于IaaS或PaaS層。應用有一份基準代碼,多份部署,也是共享,是從應用開發(fā)角度考慮,但不是云應用共享意義。

云應用可以對所有人開放,大家共享云應用提供的服務。云應用需要部署在云計算平臺上,使用云計算資源,這就實現了平臺共享和資源共享。

(三)自治

云應用部署與位置無關,你不知道它會被部署到什么位置,底層對用戶透明。所以云原生應用的依賴包、配置文件、后端服務等就需要和應用一起同生共死,成為一個整體,實現自管理自治理。

微服務的設計也遵循自治原則,和云原生應用非常相似。這可能也是把它們放一起討論的原因。因此我們在用微服務實現云原生應用的時候,自治是一個重要的判斷標準。這是分布式中心的好處,自成一體。就像人,每個人都是一個分布式中心,具備自我管理的能力。

(四)交付標準化,與位置無關

云應用構建可以在本地或者云端,運行一定在云端,那就要按照一定的標準交付,比如容器鏡像,使交付標準化。標準交付就可以在云端任何支持標準的位置部署,或者根本不需要知道被部署到了什么位置運行,和環(huán)境無關。就像Java曾經宣稱的那樣:Write Once,Run Anywhere,實現Build Once,Run Anywhere。

容器的一個好處是應用運行工具標準化,所有的應用都以標準化鏡像的方式交付,在標準化的容器里運行。容器可以運行在任何地方,或者也無需知道它運行在哪里,只需要提交鏡像發(fā)布運行就可以了。

(五)高可用性

多實例部署、彈性、自治等特性是高可用的保證。采用容器有時候并不能保證應用的穩(wěn)定性,但可以是敏捷啟停、多實例高可用的。如果需要穩(wěn)定的高可用機制,容器可能不是最好的選擇。

(六)可監(jiān)控審計

用戶對應用的訪問調用,應用的運行情況狀態(tài),不管通過日志或者接口能實時獲取到這些信息,用于計量計費、監(jiān)控和后期審計等。比如可以根據負載流量實現彈性伸縮。

(七)按需訪問自助服務

云應用部署在云端,根據客戶自己的需求,通過網絡訪問,自助使用服務,不需要聯系云應用管理人員。通常會有個云應用服務目錄,每個應用服務都有使用說明,通過服務目錄可以找到適合自己滿足自身需求的應用。

(八)可配置

云應用往往依賴配置中心,實現不同環(huán)境應用的部署運行。比如開發(fā)、測試和生產環(huán)境,一些參數的配置可能是不一樣的。很多時候又不方便把所有的配置文件都和應用打包在一起,所以可以通過配置中心來統一管理應用配置文件,甚至可以實現運行時參數更新。

配置中心更多的是從應用運維的角度來考慮的。從自治角度來說,它并不是必須的。但是也是很重要的載體,就像人有大腦存儲,但依然需要借助紙筆記憶一樣。

(九)敏捷

敏捷不管從應用開發(fā)部署角度或者運維運營角度,都是需要的。但我們覺得它不是云原生應用的關鍵特性。敏捷通常和輕量、微服務組件化相關,小了,輕了相對就敏捷多了。很多時候敏捷和架構相關,不只是技術架構,也和組織架構相關。敏捷更多的是流程、管理或體驗的需求。

五、微服務、容器和DevOps構建云原生應用

容器輕量、彈性;微服務小而專使開發(fā)、測試、更新效率提高,實現了敏捷;DevOps持續(xù)集成、持續(xù)部署、持續(xù)發(fā)布、持續(xù)監(jiān)控、持續(xù)反饋、持續(xù)改進而形成應用生命周期管理的閉環(huán)。容器的輕量特性非常適合運行微服務化應用。微服務架構使應用設計架構思想發(fā)生了改變。采用小而專的微服務完成某一特定的業(yè)務單元工作;通過微服務的組合或編排而成一個業(yè)務應用,完成特定的業(yè)務流程;業(yè)務流程可以按需編排,實時部署;鏡像使交付標準化,容器使運維調度標準化,鏡像倉庫使分發(fā)部署標準化。標準化使持續(xù)集成、部署、發(fā)布流程簡化,服務編排使應用研發(fā)實現敏捷化,DevOps持續(xù)監(jiān)控、反饋、改進使響應變化敏捷化??梢约皶r反映市場業(yè)務需求的變化和要求。

也因此容器、微服務和DevOps會被放在一起來共同構建輕量、無狀態(tài)的云原生應用。

六、應用改造和遷移

應用通過改造使其具備云原生的特性(重生),部署于云環(huán)境,可以簡單的把它看到云原生應用。但是如果不做改造直接遷移到云環(huán)境,并不能成為云原生應用,即便具備云的某些特性,比如ESB服務,并不是云原生應用。

在考慮應用遷移時,需要考慮應用是否具備云原生應用的特性,如果不具備通常需要考慮改造,以使其能夠具備云計算的優(yōu)勢。

THEEND

最新評論(評論僅代表用戶觀點)

更多
暫無評論