什麼是雲原生?聊聊雲原生的今生

簡介: 什麼是雲原生,雲原生是在一個怎麼樣的背景下被提出來的,雲原生和傳統所說的雲計算概念有什麼不同?聊聊雲原生的今生之事。

雲原生這詞在這幾年突然火了,在很多人還不瞭解她是什麼的時候頻頻被她刷屏。所以我經常說技術人是一個容易焦慮的羣體,每天被一堆新的概念拉着走,扯着學。新語言多,新概念多,新技術多,沒什麼安全感。對於新概念,我喜歡從三個層次去理解,一個是這技術名詞被提出的歷史背景,一個是技術名詞概念的演化,一個是結合比較主流的話語體系的解讀。關於雲原生,我也會從這三個方面來解讀。

雲原生(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的基礎印象。

Cloud-native foundational pillars

而到了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最初成立的宗旨之一吧,打破雲巨頭的壟斷。

landscape.png

對雲原生的解構

對一個詞的解讀,除了看其歷史發展背景,還有一種偏向於語言學的方法解讀,也就是我們常說的從“字面意思”來理解爲何這些理念的集合體。

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

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

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

第二層要從 Native 來看,雲原生和傳統的在雲上跑的應用是不同。比如一些基於公有云搭建的應用,是基於傳統的SOA架構來搭建的,然後再移植到雲上去運行,那麼他和雲得整合是非常低得。
爲什麼低呢?雲作爲一種分佈式架構,其“土著居民”也應該是基於分佈式架構設計出來得,而微服務或者Serverless這種將服務或函數拆分成一個個模塊的鬆耦合系統天然就具備分佈式設計得屬性。這是Native的第一種表現。

Monolithic deployment versus microservices

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

而最後“土著居民”的特點希望做到能在所有的雲端都是適應的,不管是各廠商的公有云 像AWS、Azure、阿里雲,還是各企業自己搭建的私有云,雲原生的應用都能做到無縫的運行和連接。

參考文獻

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