天天看點

雲原生(Cloud Native)概念與實踐一 、雲原生的誕生二、 CNCF重新定義雲原生三、到底怎麼了解雲原生四、總結

一 、雲原生的誕生

要了解一件事件,我們要回到事情起始。

雲原生(Cloud Native)的概念,由來自Pivotal的MattStine于2013年首次提出,被一直延續使用至今。這個概念是Matt Stine根據其多年的架構和咨詢經驗總結出來的一個思想集合,并得到了社群的不斷完善,内容非常多,包括DevOps、持續傳遞(Continuous Delivery)、微服務(MicroServices)、靈活基礎設施(Agile Infrastructure)和12要素(The Twelve-Factor App)等幾大主題,不但包括根據業務能力對公司進行文化、組織架構的重組與建設,也包括方法論與原則,還有具體的操作工具。采用基于雲原生的技術和管理方法,可以更好地把業務生于“雲”或遷移到雲平台,進而享受“雲”的高效和持續的服務能力。

雲原生(Cloud Native)概念與實踐一 、雲原生的誕生二、 CNCF重新定義雲原生三、到底怎麼了解雲原生四、總結

image.png

二、 CNCF重新定義雲原生

CNCF,即雲原生計算基金會,2015年由谷歌牽頭成立,基金會成員目前已有一百多企業與機構,包括亞馬遜、微軟、思科等巨頭。

目前CNCF給出了1.0的雲原生定義,連結如下:https://github.com/cncf/toc/blob/master/DEFINITION.md#%E4%B8%AD%E6%96%87%E7%89%88%E6%9C%AC

Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.

These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.

The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects. We democratize state-of-the-art patterns to make these innovations accessible for everyone.

中文版本:

雲原生技術有利于各組織在公有雲、私有雲和混合雲等新型動态環境中,建構和運作可彈性擴充的應用。雲原生的代表技術包括容器、服務網格、微服務、不可變基礎設施和聲明式API。

這些技術能夠建構容錯性好、易于管理和便于觀察的松耦合系統。結合可靠的自動化手段,雲原生技術使工程師能夠輕松地對系統作出頻繁和可預測的重大變更。

雲原生計算基金會(CNCF)緻力于培育和維護一個廠商中立的開源生态系統,來推廣雲原生技術。我們通過将最前沿的模式民主化,讓這些創新為大衆所用。

三、到底怎麼了解雲原生

上面的定義其實都是比較抽象的,不接地氣,那麼到底該怎麼了解雲原生呢?或者說要怎麼使用,怎麼開發才算是雲原生呢?

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

從這個思想出來,我們不能了解:

雲原生并非把原先在實體伺服器上跑的東西放到虛拟機裡跑,真正的雲化不僅是基礎設施和平台的事情,應用也要做出改變,改變傳統的做法,實作雲化的應用
——應用的架構、應用的開發方式、應用部署和維護技術都要做出改變,真正的發揮雲的彈性、動态排程、自動伸縮

那麼怎麼實作雲原生呢?雲原生架構和雲原生應用所涉及的技術很多,如容器技術、微服務、可持續傳遞、DevOps,這四點構成雲原生的四要素。

雲原生(Cloud Native)概念與實踐一 、雲原生的誕生二、 CNCF重新定義雲原生三、到底怎麼了解雲原生四、總結

image.png

3.1 微服務

一個微服務基本是一個能獨立釋出的應用服務,是以可以作為獨立元件更新、灰階或複用等,對整個大應用的影響也較小,每個服務可以由專門的組織來單獨完成,依賴方隻要定好輸入和輸出口即可完全開發,甚至整個團隊的組織架構也會更精簡,是以溝通成本低、效率高。

微服務的技術實作有著名spring cloud架構和正在大力發展的service mesh,比如istio,linkerd

3.2 devOps

DevOps如果從字面上來了解隻是Dev(開發人員)+Ops(運維人員),實際上,它是一組過程、方法與系統的統稱。DevOps強調的是高效組織團隊之間如何通過自動化的工具協作和溝通來完成軟體的生命周期管理,進而更快、更頻繁地傳遞更穩定的軟體。

devOps方案有ansible,saltstack,Prometheus、Alertmanager - grafana等

3.3 持續傳遞

靈活開發要求持續傳遞,因為靈活開發要求随時有一個版本可以上到大群環境,是以要持續傳遞。持續傳遞目的的快速應對客戶的需求變化,要求釋出非常頻繁,是以會存在多個版本同時提供服務的情況,是以需要支援灰階釋出/金絲雀釋出等

持續傳遞方案包括gitlab,jenkins,tekton等

3.4 容器化

說起容器化,不得提docker。

Docker是軟體行業最受歡迎的軟體容器項目,Docker起到應用隔離作用,為微服務及其所需的所有配置、依賴關系和環境變量移動到全新、無差别的運作環境,移植性強。但是docker對于分布式應用的部署和編排沒有考慮,在網絡和存儲方式都沒有提出比較好的方式,包括docker-compose。

這個時候Kubernetes橫空出世,可以說Kubernetes正在推動了雲原生的流行和發展。Kubernetes是一個允許自動化部署、管理和伸縮容器的工具。它提供了一些強大的功能,例如容器之間的負載均衡,重新開機失敗的容器以及編排容器使用的存儲,極大友善了廣大的開發者。

四、總結

雲原生的DevOps、平台、持續傳遞、微服務都是雲原生不可或缺的一部分。

雲原生不是一個産品,而是一套技術體系和一套方法論,随着雲原生的大力發展,它必将成為未來的主流,進而影響到每一個技術人員,每一個企業,每一個行業,成為我們都必須掌握的基本技能。

雲原生介紹

所謂雲原生,它不是一個産品,而是一套技術體系和一套方法論,而數字化轉型是思想先行,從内到外的整體變革。更确切地說,它是一種文化,更是一種潮流,是雲計算的一個必然導向。

雲原生概念

雲原生(Cloud Native)的概念,由來自Pivotal的MattStine于2013年首次提出,被一直延續使用至今。

這個概念是Matt Stine根據其多年的架構和咨詢經驗總結出來的一個思想集合,并得到了社群的不斷完善,内容非常多,包括DevOps、持續傳遞(Continuous Delivery)、微服務(MicroServices)、靈活基礎設施(Agile Infrastructure)和12要素(The Twelve-Factor App)等幾大主題,不但包括根據業務能力對公司進行文化、組織架構的重組與建設,也包括方法論與原則,還有具體的操作工具。采用基于雲原生的技術和管理方法,可以更好地把業務生于“雲”或遷移到雲平台,進而享受“雲”的高效和持續的服務能力。

2018年CNCF重定義:雲原生技術有利于各組織在公有雲、 私有雲和混合雲等新型動态環境中,建構和運作可彈性擴充的應用。雲原生的代表技術包括容器、服務網格、微服務、 不可變基礎設施和聲明式API。結合可靠的自動化手段,雲原生技術可進行頻繁并可預測的變更。

雲原生架構的幾個主要特征:

  • 符合12因素應用
  • 面向微服務架構
  • 自服務靈活架構
  • 基于API的協作
  • 抗脆弱性

2015年谷歌主導下CNCF成立後,起初對雲原生的定義包含以下三個方面:

  • 應用容器化
  • 面向微服務的架構
  • 應用支援容器的編排排程

2018年重定義:

  雲原生技術有利于各組織在公有雲、私有雲和混合雲等新型動态環境中,建構和運作可彈性擴充的應用。雲原生的代表技術包括容器、服務網格、微服務、不可變基礎設施和聲明式API。

雲原生設計理念

雲原生系統的設計理念如下:

  • 面向分布式設計(Distribution):容器、微服務、API驅動的開發;
  • 面向配置設計(Configuration):一個鏡像,多個環境配置;
  • 面向韌性設計(Resistancy):故障容忍和自愈;
  • 面向彈性設計(Elasticity):彈性擴充和對環境變化(負載)做出響應;
  • 面向傳遞設計(Delivery):自動拉起,縮短傳遞時間;
  • 面向性能設計(Performance):響應式,并發和資源高效利用;
  • 面向自動化設計(Automation):自動化的 DevOps;
  • 面向診斷性設計(Diagnosability):叢集級别的日志、metric 和追蹤;
  • 面向安全性設計(Security):安全端點、API Gateway、端到端加密;

雲原生四要素

雲原生的四要素:持續傳遞、DevOps、微服務、容器

雲原生(Cloud Native)概念與實踐一 、雲原生的誕生二、 CNCF重新定義雲原生三、到底怎麼了解雲原生四、總結

持續傳遞——縮小開發者認知,靈活開發方向

微服務——内聚更強,更加靈活

容器技術——使資源排程、微服務更容易

DevOps——以終為始,運維合一

雲原生的DevOps、容器技術、持續傳遞、微服務都是雲原生不可或缺的一部分,需要以全局地眼光看待問題,脫離任何一個元素,對于企業來說都是“管中窺豹”、“一葉障目”,隻有加以整合才能見到雲原生的全局風貌。

面對業态各異的業務上雲以及碎片化的物聯網解決方案部署,利用雲原生思維和模式,建構基于雲原生的物聯網平台以及解決方案,勢必将加速企業,甚至整個社會的數字化轉型。

雲原生應用的關鍵屬性

1、打包為輕量級容器:雲原生應用程式是打包為輕量級容器的獨立自治服務的集合。與虛拟機不同,容器可以快速擴縮容。将擴充單元轉移到容器,能夠優化基礎架構使用率。

2、使用最佳語言和架構開發:雲原生應用程式的每項服務都是使用最适合該功能的語言和架構開發的。雲原生應用程式是多語言的,服務會使用各種不同的語言、運作時和架構。例如,開發人員可以建構基于在Node.js中開發的WebSockets的實時流服務,同時選擇Python和Flask來暴露API。開發微服務的細粒度方法使它們能夠為特定任務選擇最佳語言和架構。

3、設計為松耦合的微服務:屬于同一應用程式的服務通過應用程式運作時來發現彼此。它們獨立于其他服務而存在。正确內建時,彈性基礎架構和應用程式架構可以高效地、以高性能來進行擴充。

松耦合的服務讓開發人員可以在處理每個服務時都能夠獨立于其他服務來工作。通過這種分離,開發人員可以專注于每項服務的核心功能,以提供細粒度的功能。這種方法可以實作整個應用程式的有效生命周期管理,因為每個服務都是獨立維護的,并且擁有明确的所有權。

4、以API為中心進行互動和協作:雲原生服務使用輕量級API,這些API基于REST、gRPC或NATS等協定。REST通常被用作通過HTTP公開API的最低公分母。為了提高性能,gRPC通常用于服務之間的内部通信。NATS具有釋出-訂閱功能,可在應用程式内實作異步通信。

5、在架構中将無狀态和有狀态服務清晰分離:持久耐用的服務通常遵循不同的模式,以確定更高的可用性和彈性。無狀态服務和有狀态服務是彼此獨立存在的。存儲會影響容器的使用。我們必須越來越多地在有狀态、無狀态、微存儲環境(這一點有些人可能覺得有争議)等不同語境下考慮持久性這一因素。

6、與伺服器和作業系統依賴關系隔離:雲原生應用程式與任何特定作業系統或單個計算機沒有關聯。它們在更高的抽象級别上運作。唯一的例外是微服務需要某些功能,包括固态驅動器(SSD)和圖形處理單元(GPU),這些功能可能由一部分機器專門提供。

7、部署在自服務的彈性雲基礎架構上:雲原生應用程式部署在虛拟的、共享的和彈性的基礎架構上。它們可以與底層基礎架構保持一緻,以動态增長和縮小——根據不同的負載來自我調節。

8、通過靈活DevOps流程進行管理:雲原生應用程式的每項服務都會經曆一個獨立的生命周期,通過靈活的DevOps流程進行管理。多個持續內建/持續傳遞(CI / CD)流水線可以協同工作以部署和管理雲原生應用程式。

9、自動化功能:雲原生應用程式可以高度自動化。它們與Infrastructure as Code的概念相得益彰。企業需要一定程度的自動化來管理大型和複雜的應用程式。

10、定義的、政策驅動的資源配置設定:最後,雲原生應用程式與通過一組政策定義的治理模型一緻。它們遵循CPU和存儲配額以及将資源配置設定給服務的網絡政策等政策。例如,在企業方案中,中央IT可以定義政策來為每個部門配置設定資源。每個部門的開發人員和DevOps團隊都擁有對其資源共享的完全通路權和所有權。

“雲原生”應用價值

從CNCF的定義來看,采用基于雲原生的技術和管理方法,将更好地把業務生于“雲”或遷移到雲平台,進而享受“雲”的高效和持續服務能力。

1)快速疊代

利用雲原生應用程式開發,意味着使用靈活與可擴充的元件,如以Kubernetes為代表的容器來提供離散和可重用的功能,這些功能以良好描述的方式內建,甚至跨越多雲等技術邊界,這使得傳遞團隊可以使用重複的自動化和編排來快速疊代。

2)自動部署

雲原生方法遠優于傳統的面向虛拟化的業務流程,傳統方法需要投入大量的精力來建構開發環境,以及軟體傳遞過程中的其他不同環境。而雲原生架構具備自動化群組合功能,并且依賴于可靠、經過驗證和稽核的已知良好流程的基礎,傳遞十分靈活,而不再需要人工幹預重複執行。

3)獨立高效

雲原生帶來了微服務化架構,一個微服務基本是一個能獨立釋出的應用服務,是以可以作為獨立元件更新、灰階或複用等,對整個大應用的影響也較小,每個服務可以由專門的組織來單獨完成,依賴方隻要定好輸入和輸出口即可完全開發、甚至整個團隊的組織架構也會更精簡,是以溝通成本低、效率高。

雲原生于中國市場

在中國市場,雲原生仍然是一個較為新的概念,多數中國企業在雲原生的專業知識、部署開發以及管理應用的能力仍不成熟。令人欣慰的是,在雲原生道路上探索公有雲廠商們已經做出了許多的努力,諸如AWS的ECS産品、用友雲的PaaS基礎平台等容器服務已經被許多使用者所認可,而雲管理服務商們也已充分意識到了雲原生将是企業數字化轉型的加速器。作為數字化轉型的引領者,雲管理服務商們正努力成為雲原生的先行者,不斷嘗試并挖掘雲原生的精髓所在,突破更多的雲原生部署壁壘,以幫助企業快速建構雲原生應用,實作微服務架構改造以及DevOps落地。

随着雲計算的大行其道,大家都在喊着要上雲,雲原生(Cloud Native)的概念應運而生,甚至國内外的大廠們還聯合成立了雲原生基金會CNCF(https://www.cncf.io/)。我們剛剛搞懂什麼是移動網際網路,雲計算,微服務,那麼什麼是雲原生呢? 把服務應用上雲租個雲伺服器就是雲原生了嗎?當然不可能這樣簡單,那麼筆者今天和大家聊聊什麼是雲原生吧。

繼續閱讀