天天看點

雲原生與雲原生應用概念解析

什麼是雲原生?

雲原生(cloud native)是由 pivotal 的matt stine在2013年提出的一個概念,是他多年的架構和咨詢總結出來的一個思想的集合。

在雲的時代,應用會更多的遷移到雲端,基于雲的架構設計和開發模式需要一套全新的理念去承載,于是雲原生思想應運而生。

雲原生是面向“雲”而設計的應用,是以技術部分依賴于在傳統雲計算的3層概念(基礎設施即服務(iaas)、平台即服務(paas)和軟體即服務(saas)),例如,靈活的不可變基礎設施傳遞類似于iaas,用來提供計算網絡存儲等基礎資源,這些資源是可程式設計且不可變的,直接通過api可以對外提供服務;有些應用通過paas服務本來就能組合成不同的業務能力,不一定需要從頭開始建設;還有一些軟體隻需要“雲”的資源就能直接運作起來為雲使用者提供服務,即saas能力,使用者直接面對的就是原生的應用。

在一般用法中,“雲原生”是一種建構和運作應用程式的方法,它利用了雲計算傳遞模型的優勢。“雲原生”是關于如何建立和部署應用程式,和位置無關。 這意味着應用程式位于雲中,而不是傳統資料中心。

概況來說,雲原生(cloud native)是一個思想的集合,包括devops、持續傳遞(continuous delivery)、微服務(microservices)、靈活基礎設施(agile infrastructure)、康威定律(conways law)等,以及根據商業能力對公司進行重組。cloud native既包含技術(微服務,靈活基礎設施),也包含管理(devops,持續傳遞,康威定律,重組等)。cloud native也可以說是一系列cloud技術、企業管理方法的集合。

雲原生更是一個不斷豐富的理念和技術體系,它在基礎架構、應用程式和管理上都将深刻的影響和改變企業雲的未來!

雲原生應用

雲原生應用是天然适合雲特點的應用,雲原生應用系統需要與作業系統等基礎設施分離,不應該依賴linux或windows等底層平台,或依賴某個雲平台。也就是說,應用從開始就設計為運作在雲中,無論私有雲或公有雲;其次,該應用必須能滿足擴充性需求,垂直擴充(向上和向下)或水準擴充(跨節點伺服器)。

cncf給出了雲原生應用的三大特征:

容器化封裝:以容器為基礎,提高整體開發水準,形成代碼群組件重用,簡化雲原生應用程式的維護。在容器中運作應用程式和程序,并作為應用程式部署的獨立單元,實作高水準資源隔離。

動态管理:通過集中式的編排排程系統來動态的管理和排程。

面向微服務:明确服務間的依賴,互相解耦。

雲原生應用和本地部署應用程式之間的差異

雲原生應用程式開發采用與傳統企業應用程式完全不同的體系結構。

程式設計語言

編寫在公司伺服器上運作的本地部署應用程式往往使用傳統語言編寫,如c/c ++,c#或其他visual studio語言(如果部署在windows server平台上)和企業級java。如果它在大型機上,可能使用cobol。

雲原生應用更有可能以網絡為中心的語言編寫,這意味着使用html,css,java,javascript,.net,go,node.js,php,python和ruby。

可更新

雲原生應用程式始終是最新的,雲原生應用始終可用。

本地部署應用程式需要更新,并且通常由供應商按訂閱提供,并且在安裝更新時需要停機。

彈性

雲原生應用程式通過在峰值期間增加的資源來利用雲的彈性。如果你的基于雲的電子商務應用程式使用頻繁,你可以将其設定為使用額外的計算資源,直到峰值消退然後關閉這些資源。雲原生應用可以根據需要調整增加資源和規模。

本地部署應用程式無法動态擴充。

多租戶

雲原生應用程式在虛拟化環境中工作,并與其他應用程式共享資源沒有問題。

許多本地部署應用程式要麼在虛拟環境中不能正常工作,要麼根本不工作,必須要非虛拟化環境。

連接配接資源

本地部署應用程式與網絡資源的連接配接相當嚴格,例如網絡,安全性,權限和存儲。其中許多資源需要進行寫死,如果移動或更改了任何内容,它們就會中斷。

“網絡和存儲在雲端完全不同。當你聽到“重新平台化”一詞時,通常是為了适應網絡,存儲甚至資料庫技術的變化,以允許應用程式在雲中運作,“deloitte的kavis說。

停止時間

雲中存在比本地部署更大的備援,是以如果雲供應商遭受中斷,則另一個備援區域可以消除中斷。

本地部署應用程式可能已準備好故障轉移,但如果伺服器出現故障,應用程式可能會崩潰。

自動化

雲計算的大部分都是自動化的,其中包括應用程式管理。 “雲原生傳遞的好處,特别是速度和靈活性,依賴于可靠,經過驗證和經過稽核的已知良好流程的基礎,這些流程根據自動化和編排工具的需要而不是通過人工幹預重複執行,”splunk的mann說。工程師應該考慮自動化是不止一次做的任何事情,以實作可重複性,自助服務,靈活性,可擴充性以及審計和控制。

本地部署應用程式必須手動管理。

子產品化設計

本地部署應用程式往往在設計上是單一的。他們肯定會将一些工作解除安裝到庫中,但最終它是一個包含大量子程式的大應用程式。雲原生應用程式更加子產品化,許多功能分解為微服務。這允許在不需要時關閉它們,并将更新推廣到那個子產品,而不是整個應用程式。

無狀态

雲的松耦合特性意味着應用程式與基礎架構無關,這意味着它們是無狀态的。雲原生應用程式将其狀态存儲在資料庫或其他外部實體中,是以執行個體可以來去,應用程式仍然可以跟蹤應用程式在工作單元中的位置。 “這是松耦合的本質。不依賴于基礎架構允許和應用程式以高度分布的方式運作,并且仍然保持其狀态獨立于底層基礎架構的彈性性質,“kavis說。

大多數本地部署應用程式都是有狀态的,這意味着它們會在運作代碼的基礎架構上存儲應用程式的狀态。是以,在添加伺服器資源時可能會破壞應用程式。

繼續閱讀