天天看點

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

前言

雲原生計算利用了許多現代技術,包括: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說。

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

雲原生的挑戰

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

繼續閱讀