什麼是雲原生?——現代軟件開發方法

前言

雲原生計算利用了許多現代技術,包括:PaaS,混合雲,微服務,敏捷方法論,容器,CI/CD和devops。

雲原生這個屬於經常被提及,尤其是雲服務商。不僅如此,它甚至有自己的基金會——the Cloud Native Computing Foundation(CNCF,即:雲原生計算基金會),2015年由Linux基金會成立的。

雲原生定義

在通常的應用中,雲原生是利用雲計算交付模型來構建和運行應用的一個方法。雲原生是關於如何創建和部署應用,而不是在哪裏創建和部署。與本地數據中心相反,雲原生意味着應用運行於公有云上。

CNCF對雲原生的定義更爲狹隘一些。使用開源軟件技術棧進行容器化,應用的每一部分都打包在自己的容器內,因此可以對每一部分進行主動調度來使得資源的使用最佳化。並且,以面向微服務來增加應用的整體靈活性和可維護性。

諮詢公司德勤的總經理邁克·卡維斯(Mike Kavis)表示,雲原生應用程序經過專門設計,可以在現代雲計算平臺所需的彈性、分佈式環境中運行。這些應用是鬆散耦合的,意味着代碼不會硬關聯到任何基礎設施組件中,因而應用可以按需彈性伸縮,幷包含不變基礎設施的理念。通常,這些架構會使用微服務構建,但不是必須的。

雲服務提供商Splunk的首席技術倡導者安迪·曼(Andi Mann)表示,對於雲原生應用程序,真正最大的區別是應用是如何構建、交付、操作。利用雲服務的優勢意味着使用敏捷和可擴展組件(例如容器)來交付具有離散和可重複使用的功能,這些功能以很好的方式進行集成,甚至跨域了技術邊界(例如混合雲),這將允許交付團隊可以使用可重複的自動化和編排進行快速迭代。

開發雲原生應用通常包括devops,敏捷方法論,微服務,雲平臺,容器(例如Kubernetes和Docker),CD(持續交付),簡而言之,是每種現代應用部署方法。

正因如此,你會非常想要擁有一個PaaS(平臺即服務)模型。一個Pass平臺不是必須的,但它將使很多問題變得非常簡單。絕大部分雲用戶都是從IaaS(基礎設施即服務)開始的,這將幫助他們從底層硬件種抽象出他們的應用。但是,PaaS增加了一層額外的層來抽象出底層的操作系統,因而你可以完全專注在你的應用的業務邏輯上,而不用擔心進行系統調用。

雲原生應用和本地應用的區別

相較於傳統企業應用,開發雲原生應用需要一個非常不同的架構。

語言

如果應用部署在Windows服務器平臺上,運行在服務器上的本地應用更傾向於使用傳統語言編寫,例如C/C++,C#或者其他Visual Studio支持的語言或者企業級Java。如果是在大型主機上,那麼可能是Cobol(一種高級語言)。

雲原生應用更多的使用web語言編寫,例如HTML,CSS,Java,JavaScript,.Net,Go,Node.js,PHP和Ruby。

可更新性

雲原生應用總是當前最新的,也總是可用的。

本地應用需要更新,通常由供應商以訂閱的方式交付,並且在更新時需要停機。

彈性

在應用使用高峯期,雲原生應用可以使用更多資源來利用雲的彈性。如果你的基於雲的電子商務應用在使用時遇到了高峯期,你可以給它分配額外的計算資源,在高峯期過去後再關閉那些資源。一個雲原生應用可以適應資源的增加並按需伸縮。

本地應用無法動態伸縮。

多組織

雲原生應用可以很好的在虛擬環境中工作,並能和其他應用共享資源。

許多本地應用在虛擬環境中無法正常工作,或者根本就無法運行,它們需要一個非虛擬化的空間。

關聯資源

一個本地應用在連接網絡資源方面是相當嚴格的,例如網路,安全性,權限和存儲。這些資源很多都要硬編碼,如果有任何資源移動或修改,應用將無法運行。

在雲上,網絡和存儲就完全不一樣,當你聽到“重新平臺化”這個術語時,就是典型的爲了使應用能夠在雲上運行,而對網絡、存儲、甚至數據庫技術做出適應的改變而進行的工作。德勤的Kavis說。

停工時間

雲應用的冗餘比本地應用的冗餘大得多,因此,如果一個雲提供商出現了故障,另一個區域可以填補故障空缺。

本地應用可能已經準備好了故障轉移,但是如果服務器宕機了,將會是一個非常大的挑戰,因爲應用也會隨之宕機。

自動化

如此多的雲是自動化的,包括應用的管理也是自動化的。雲原生應用的交付非常快且敏捷,這在很大程度上取決於可靠、久經實踐且被廣泛認可的可以重複執行的自動化流程,而不是人工的干預來重複執行,Splunk說道。工程師們應儘可能尋求方法來實現自動化,以實現可重複性、自助服務、敏捷、彈性伸縮、驗證和控制。

本地應用必須人工管理。

模塊化設計

本地應用傾向於設計成單應用,他們把一些工作轉移到了庫中,可以確定的是,應用最終變成一個擁有許多子程序的龐大應用。雲原生應用更加模塊化,許多功能都拆分成了微服務。這允許在不需要時可以關閉它們,並將更新推送到指定的一個模塊,而不是整個應用。

無狀態化

雲應用低耦合的特性意味着應用不會強關聯在基礎設施上,也就意味着它們時無狀態的。一個雲原生應用將其狀態存儲在數據庫或外部實體中,因此即使實例來來去去,應用程序依然可以跟蹤到實例在應用中的位置。"這是低耦合的本質,不受基礎架構的約束,允許應用以高度分佈式方式運行,並且保持其狀態獨立於基礎架構的彈性性質。"Kavis說。

許多的本地應用是有狀態的,意味着它們將應用的狀態存儲在運行代碼的基礎設施上。當添加服務器資源時,該應用程序可能會中斷。

雲原生的挑戰

客戶犯的一個最大的錯誤就是將他們的舊的本地應用程序遷移到雲上。嘗試將現有應用程序(尤其是整體式遺留應用程序)遷移到雲基礎設施中並不能利用到雲原生的特性。

相反,你應該用新的方式做新的事,既可以把新的雲原生應用程序放到新的雲原生基礎設施中,也可以分解現有的單體應用,依據雲原生的規則來重構它們。

你還需要拋棄舊的開發人員方法。瀑布模型肯定不能使用了,甚至敏捷開發都不夠用。因此,你必須採用新的雲原生方法,例如最小可行產品開發(MVP),多變量測試,快速迭代,並在devops模型中跨組織邊界緊密合作。

雲原生有很多層面,包括基礎設施服務,自動化編排,虛擬化和容器化,微服務架構以及可觀察性。所有這些都意味着一個新的做事方式,意味着你在學習新的方法時打破舊的習慣。因此,請以一定的速度進行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章