雲原生和傳統雲端計算到底存在哪些不同?

danny_2018發表於2022-05-18

什麼是雲原生?它是在一個怎麼樣的背景被提出的,雲原生和傳統雲端計算到底存在什麼不同?本篇文章將告訴你答案。

雲原生在近兩年突然火了,在很多人還不瞭解它是什麼的時候就頻煩被刷屏。每天被一堆新的概念拉著走,扯著學。對於新概念,可以從三個層次去理解,一個是這技術名詞被提出的完整歷史背景,一個是技術概念名詞的演化過程,一個是結合當前比較主流的話語體系、現實案例來的解讀。

雲原生(Cloud Native)的由來

雲原生的概念最早開始於2010年,在當時 Paul Fremantle 的一篇部落格中被提及,他主要將其描述為一種和雲一樣的系統行為的應用的編寫,比如分散式的、鬆散的、自服務的、持續部署與測試的。當時提出雲原生是為了能構建一種符合雲端計算特性的標準來指導雲端計算應用的編寫。

後來到2013年 Matt Stine在推特上迅速推廣雲原生概念,並在2015年《遷移到雲原生架構》一書中定義了符合雲原生架構的特徵:12因素、微服務、自服務、基於API協作、扛脆弱性。而由於這本書的推廣暢銷,這也成了很多人對雲原生的早期印象,同時這時雲原生也被12要素變成了一個抽象的概念。

CNCF基金會成立及雲原生概念的演化

2015年由Linux基金會發起了一個The Cloud Native Computing Foundation(CNCF) 基金組織,CNCF基金會的成立標誌著雲原生正式進入高速發展軌道,google、Cisco、Docker各大廠紛紛加入,並逐步構建出圍繞 Cloud Native 的具體工具,而云原生這個的概念也逐漸變得更具體化。因此,CNCF基金最初對雲原生定義是也是深窄的,當時把雲原生定位為容器化封裝+自動化管理+面向微服務:

The CNCF defines “cloud-native” a little more narrowly, to mean using open source software stack to be containerized, where each part of the app is packaged in its own container, dynamically orchestrated so each part is actively scheduled and managed to optimize resource utilization, and microservices-oriented to increase the overall agility and maintainability of applications.

這主要因為CNCF基金會在當時的核心拳頭軟體就是 k8s,因此在概念定義上主要是圍繞著容器編排建立起來的生態。其實這也是為什麼我們可以看到 CNCF 定義雲原生的時候有時感覺就是再說容器生態。

到了2017年, 雲原生應用的提出者之一的Pivotal在其官網上將雲原生的定義概況為DevOps、持續交付、微服務、容器這四大特徵,這也成了很多人對 Cloud Native的基礎印象。

而到了2018年,隨著Service Mesh的加入,CNCF對雲原生的定義發生了改變,而這也逐漸作為被大家認可的官方定義:

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.

總結一下就是:

(1)基於容器、服務網格、微服務、不可變基礎設施和宣告式API構建的可彈性擴充套件的應用;

(2)基於自動化技術構建具備高容錯性、易管理和便於觀察的松耦合系統;

(3)構建一個統一的開源雲技術生態,能和雲廠商提供的服務解耦,

可以看出這一階段CNCF對雲原生的定義加上服務網格和宣告式API,同時為這一概念闡述更深一層的意義,也就是建立一個統一中立的開源雲生態(至於是否中立嘛這裡就不談了:)。這對雲原生的生態定位會是很重要的一點,也算CNCF最初成立的宗旨之一吧,打破雲巨頭的壟斷。

對雲原生的解構

對一個詞的解讀,除了看其歷史發展背景,還有一種就是純粹的從“字面意思”來理解為何這些概念。

Cloud Native,從詞面上拆解其實就是 Cloud 和 Native,也就是雲端計算和土著的意思——雲端計算上的原生居民,即天生具備雲端計算的親和力。

那怎麼理解“雲的原生居民”呢?

首先從雲的角度來理解,雲本質可以看作是一種提供穩定計算儲存資源的物件,為了實現這點,像虛擬化、彈性擴充套件、高可用、高容錯性、自恢復這些都是雲的最基本的屬性,雲原生作為一種雲端計算,這是所具備的第一層含義。

第二層要從 Native 來看,雲原生和傳統的在雲上跑的應用是不同。比如一些基於公有云搭建的應用,是基於傳統的SOA架構「(Service-Oriented Architecture)面向服務的架構」來設計並搭建實現的,然後再移植到雲伺服器上去執行,那麼它和雲得整合是非常低得,目前絕大多數的saas服務都是這樣的,例如用友、金蝶等。

那為何說與雲的整合程度低呢?雲作為一種分散式架構,其“土著居民”也應該是基於分散式架構設計出來得,而微服務或者Serverless這種將服務或函式拆分成一個個模組的松耦合系統天然就具備分散式設計得屬性。這是Native的第一種表現。

其次雲作為一種PaaS服務,這位“土著居民”從出生(設計)到成長(開發),再到生活(部署)都應該是基於雲的理念來實現的,那麼就需要一套自動化的開發流程CI/CD來實現。這是Native的第二種表現。

而最後“Native”的特點希望做到能在所有的雲端都是自適應的,不管是各廠商的公有云像亞馬遜的AWS、微軟的Azure、國內的阿里雲,還是各企業自己搭建的私有云,雲原生的應用都能做到無縫的執行和連線。

來自 “ 智慧城市知識庫 ”, 原文作者:智慧城市知識庫;原文連結:https://it.sohu.com/a/547707022_121400573,如有侵權,請聯絡管理員刪除。

相關文章