1. 程式人生 > >雲原生與無伺服器架構是雲端計算的未來嗎?——雲端計算的演進

雲原生與無伺服器架構是雲端計算的未來嗎?——雲端計算的演進

作為“十三五”重點規劃產業之一,雲端計算到底是什麼?又會怎樣發展?最近興起的雲原生(Cloud Native)和無伺服器架構(Serverless)又與雲端計算有什麼關係?本文將以雲端計算的發展為路線,為大家科普雲端計算的概念與現狀,無論讀者是開發、測試、抑或是產品、管理者都能在本文中有所收穫。

縱觀整個伺服器的發展歷程,可以分為三階段,自建伺服器時代、伺服器託管與租賃時代、雲端計算時代。

自建伺服器時代

早期的計算機主要分為兩種使用方式,組織自建機房與租用,自建機房很好理解,就是買一臺放在公司自己用,租用一般是製造商提供租賃使用,按時付費,是不是有點今天雲伺服器的意思?

早期的IBM 650要價50萬美金,或可以每月3500 美金的價格出租。

伺服器託管與租賃時代

至 Web 時代來臨,IT 公司大量採用 B/S(瀏覽器/服務端) 架構,客戶端越來越輕量化,大部分資源儲存在服務端,導致伺服器需求激增,於是伺服器託管業務應運而生,早期多為 ISP 即網際網路服務提供商(Internet Service Provider)承接,簡單來說就是買一臺伺服器(也可以直接使用 ISP 的伺服器),放到 ISP 機房由 ISP 負責維護,比如分配 IP,網路頻寬,免去要申請商業化寬頻以及管理伺服器的麻煩,節省辦公空間。

發展到這時,租用 ISP 的伺服器已經有了雲端計算的雛形了。但還是有很多缺陷:

  • 部署笨重,一臺伺服器只能租賃給一個客戶,無法共享資源池
  • 無法監控服務,伺服器物理獨立,很難介入監控系統狀態
  • 費用很高,伺服器要錢、託管也要錢,對中小企業不友好、個人開發者更沒可能
  • 伺服器利用率不高,一臺8核16g的伺服器,幾個程式很難將伺服器跑滿,即便跑滿了也無法保證獨立互不影響
  • 單點故障問題,如果伺服器損壞,很難快速甚至可能無法恢復服務

伺服器託管與租賃如今也大規模存在。

雲端計算時代

辦法總比問題多,這些問題伴隨著 2000 年左右虛擬化成熟迎刃而解,而 2013 年的容器化技術更是讓雲端計算錦上添花,在瞭解雲端計算之前,我們先來了解一下虛擬化技術。

虛擬化技術

虛擬化技術早在60年代就被 IBM 創造出來了,當時是為了並行執行程式(早期計算機單一時間只能執行一個程式,想要執行另外一個就要退出當前程式),後來被多程序多執行緒技術取代了。

虛擬化技術就是將計算機硬體模擬成多個並且分別提供給多個使用者使用,其實現也很簡單,就是在硬體與作業系統間增加一層代理,用於欺騙(隔離多個)作業系統,這個代理就是大名鼎鼎的 Hypervisor,Hypervisor 也叫虛擬機器監視程式( virtual machine monitor, VMM),並不是指某個具體的軟體,而是代表所有能夠管理虛擬機器的軟體。

Hypervisor 按結構劃分可以分為兩類,一類直接接管硬體(Native 或稱 Bare metal)自己就是一個專用作業系統,如 Hyper-V、VMware ESXi、Xen、Kvm 等;另一類需安裝在作業系統上(Hosted),這一類普通使用者接觸的比較多,如 Parallels Desktop for Mac、QEMU、Virtual Box、VMware Workstation 等,下圖從左到右分別為 Native 與 Hosted。

Hypervisor 按照技術實現可以分為,全虛擬化(Full virtualization)與半虛擬化(Paravirtualization),全虛擬化致力於完全模擬,虛擬機器內執行的作業系統無感知,其優點是相容性好,作業系統無需修改即可執行在虛擬化環境上,缺點是因為一些歷史遺留問題(CPU 設計缺陷,部分敏感指令無法被捕獲,一般使用動態劫持,Hypervisor 攔截,動態替換指令,後續的硬體輔助虛擬化解決了這個問題,見下文)導致效率比較低,如 Vmware Workstation/Server, Virtual PC/Server,Parallel Workstation;而半虛擬化則部分模擬指令,很難模擬的指令則通過修改虛擬機器內的作業系統核心來實現,其優點是效率較高,缺點是必須修改作業系統核心,如 Xen,Vmware ESX Server,Microsoft Hyper-V R1等,需注意的是二者僅是將部分敏感指令在不同位置處理,全虛擬化在 Hypervisor 中處理,半虛擬化則在虛擬機器作業系統中處理。

硬體輔助虛擬化於 1972 年首次出現在 IBM System / 370 上,英特爾與 AMD 意識到虛擬化市場的重要性,於是也想做些貢獻(撈一筆),x86 處理器輔助虛擬化(英特爾 VT-x 或 AMD-V)分別在 2005 年和 2006 年推出。硬體輔助虛擬化致力於解決早期的 CPU 設計缺陷,並且增加了虛擬化專用指令來提高效率,目前硬體輔助虛擬化已經成為伺服器虛擬化的基石(虛擬化技術還包括記憶體、儲存、網路虛擬化等,此處不再展開)。

Hypervisor 的虛擬化方式被稱為硬體虛擬化(早期叫平臺虛擬化),硬體虛擬化的出現徹底解決了資源分配的問題,其優點是隔離性好,幾乎模擬了真實環境,缺點是每個使用者使用獨立的作業系統核心、執行時,資源浪費,設想一下場景,如果同一個伺服器需要多個隔離環境的 Window Server 2012,採用虛擬化則需要執行多個作業系統,即便版本、環境都一模一樣也無法共用資源。是否有一種更輕量化的資源分配方式呢?這就不得不提大名鼎鼎的容器化技術。

容器化技術

容器技術(Containerization)在技術上幾乎沒有創新,是一種作業系統級別虛擬化技術(OS-level virtualization),通過作業系統的支援模擬出隔離環境、限制資源訪問,其本質上僅僅是作業系統中的一個程序,本身足夠輕量化。如今容器化技術幾乎被 Docker 壟斷,Docker 於 2013 年 3 月開源,至今已經成為雲端計算與微服務乃至雲原生架構中至關重要的技術,Docker 相比虛擬化技術具有輕量化,效率高(所有容器使用同一個作業系統核心、執行時)等特點,缺點是隔離不好,伺服器壓力高,所有 Docker 程序都會受到影響,有趣的是 Docker 與前面的虛擬化技術完美互補。Docker 解決了資源分配問題,而 2014 年 Google 開源的 Kubernetes 則解決了雲與容器的結合問題,目前 Kubernetes 已經成為容器管理、編排事實上的標準。

至此雲端計算在資源排程方面已經集齊了最後一顆龍珠,虛擬化技術的成熟標誌著雲端計算成熟,雲端計算採用虛擬化技術與容器技術結合規劃資源,而 Kubernetes 的橫空出世則代表雲端計算將告別僅僅租賃伺服器的時代。

什麼是雲端計算?

我們來看美國國家標準和技術研究院(National Institute of Standards and Technology)的定義:

  • 隨需應變的自助服務。
  • 隨時隨地用任何網路裝置訪問。
  • 多人共享資源池。
  • 快速重新部署的靈活度。
  • 可被監控與測量的服務。

一般認為還有如下特徵:

  • 基於虛擬化技術快速部署資源或獲得服務。
  • 減少使用者終端的處理負擔。
  • 降低了使用者對於 IT 專業知識的依賴。

簡單來說就是按需付費,支援按時、按 CPU 核、按記憶體、按頻寬、按硬碟大小來付費。雲計算髮展到今天,有著更細化的市場,如阿里就將服務分為彈性計算(IaaS),儲存服務(PaaS),資料庫(PaaS)等,每種設施還有更加細緻的分類,如彈性計算中的 ECS,就可以分為通用型、計算型、記憶體型等,用於滿足不同企業需求(本段文字 500 元,去掉括號中內容再發)。

雲端計算的發展

講雲計算髮展必須先了解雲端計算的概念。雲端計算由美國國家標準和技術研究院(National Institute of Standards and Technology)定義了三種模型,對應三種服務級別:基礎設施即服務(IaaS)、平臺即服務(PaaS)和軟體即服務(SaaS)。

  • IaaS(Infrastructure as a service)基礎設施可以簡單理解為虛擬機器、伺服器、儲存、網路等,如亞馬遜的EC2、阿里的ECS。
  • PaaS(Platform as a service)平臺可以理解為一些更具體的基礎設施,比如 Web 伺服器、資料庫等,如阿里的雲資料庫系列。
  • SaaS(Software as a service)軟體可以理解為開箱即用的軟體,廣義上來講,所有的網際網路產品都可以是 SaaS,如釘釘、163 郵箱,都可以被稱為 SaaS。

其他擴充套件

XaaS,面向服務架構(Service-oriented architecture ,SOA )提出的架構理念,即一切皆服務,“X as a service”、“anything as a service”或“everything as a service” ,也有寫作 EaaS,具體實現如:IDaaS 身份認證即服務(Identity as a Service)、BaaS 區塊鏈即服務(Blockchain as a service)、PaaS 支付即服務 (Payments as a service)等,這些都可以被歸集到上面三種模型。

雲端計算按照部署版本可以分為私有云、公有云、混合雲。私有云為企業私有,並不對外服務;公有云並不代表免費,而是對外提供使用(收費);混合雲則同時擁有二者特性。

相信讀者到這裡已經瞭解什麼是雲端計算,簡單來說就是對外伺服器租用,早期的伺服器租用在員外看來也可以稱之為雲端計算(IaaS),對比今天的雲產品本質上沒有區別,只是在資源上更加細化,服務上更加完善而已。我們來看一下雲端計算的歷程:

  • 1996年,Compaq公司在其公司的內部檔案中,首次使用“雲端計算”這個詞彙。
  • 2006年8月,亞馬遜建立了子公司Amazon Web Services,並推出了彈性計算雲(Elastic Compute Cloud, EC2)。
  • 2008年4月,谷歌釋出了測試版 Google App Engine。
  • 在2008年初,NASA的OpenNebula在歐洲委員會(RESERVOIR)資助的專案中得到了增強,成為第一個用於部署私有云和混合雲的開源軟體。
  • 2010年2月,微軟於2008年10月釋出了Microsoft Azure。
  • 2010年7月,Rackspace Hosting與NASA共同發起了一項開源雲軟體計劃,稱為OpenStack。 OpenStack 早期程式碼來自NASA的Nebula平臺以及Rackspace的Cloud Files平臺。 OpenStack 是第一個開源的雲平臺。
  • 2011年3月1日,IBM宣佈了支援Smarter Planet的IBM SmartCloud框架。
  • 2012年5月,Google Compute Engine 釋出了預覽版本。
  • 2012年6月7日,Oracle釋出了Oracle Cloud。
  • 2013年12月,Google Compute Engine 又推出了 GA(General Availability ) 版本。

國內雲端計算起步稍晚:

  • 2010 年 5 月,阿里雲對外公測。
  • 2013 年 9 月,騰訊雲面向全社會開放、雲安全上線
  • 2015百度開放雲正式對外開放

注:國內部分來自百度百科,不負責準確性,其他國內雲廠商查不到準確上線時間。

前文說過,雲計算髮展本質上就是逐步細化資源與完善服務,我們來看一下雲產品發展至今,到底發展了什麼:

灰色代表雲廠商提供服務,藍色代表 IT 公司自己管理的部分,雲端計算越成熟,IT 公司負擔越少、成本越低。對比託管服務,我們發現雲端計算幾乎彌補了所有託管服務的缺點,比如亞馬遜的 EC2 伺服器宣佈可以保證 99.99% 的可用性,每個月宕機時間不超過 0.01%,即 4.38 分鐘。

雲原生與Serverless

如今大規模普及的 PaaS 已經提供了絕大多數的服務,SaaS 並不適合通用場景,雲端計算若想再進一步只能從兩個方向入手:

  • 方案一:繼續開發通用的 SaaS 平臺
  • 方案二:嘗試從 PaaS 上入手

方案一沒有可行性,雲提供商不可能開發市面上所有的業務系統,並且雲廠商也沒有精力做。我們從方案二入手,根據上圖我們可以得出結論:PaaS 與 SaaS 區別在於是否管理應用,兩者之間是否有折中的方案?進一步考慮,雲端計算實際上是減少了伺服器與運維成本,而 IT 企業更大的成本在於編碼(研發成本),能否有一種方案能夠簡化編碼從而降低企業成本呢?運維成本還可以再降嗎?雲廠商自然不會停滯不前:

  • 降低運維成本,現在階段雲廠商提供的服務還需要運維人員來管理伺服器數量、記憶體大小、CPU核心數、所在區域等,無伺服器(Serverless)架構就致力於解決以上問題,在無伺服器模式下,運維人員只需要關心部署即可。具體產品有AWS Lambda、Google Cloud Functions、IBM Cloud Functions、Azure Functions等,但目前的無伺服器(Serverless)架構大多需要針對程式設計,還不是很完善。
  • 降低開發成本則提出了雲原生(Cloud Native)的概念,雲原生致力於簡化整個開發生態,從開發到運維甚至雲端計算廠商,目前雲原生主要依賴微服務、容器化技術、容器編排(Kubernetes)來實現。

雲原生與無伺服器模式概念較新,且還沒有特別好的落地方案,限於篇幅,本篇不再繼續展開,如果讀者感興趣可以關注本人公眾號,下一篇我們通過討論架構設計的演進來展開。

總結

雲端計算即便發展到今天,表象上還是伺服器租賃,這也是有人批評雲端計算是新瓶裝舊酒的原因。但云計算經過多年的發展,本質上是集中資源統一高效管理的思想體現,比如員外所在的北方每年冬天都會集中供暖,本質上也是集中資源統一管理的思想。集中管理提高了資源的使用率,進而降低了資源的單位成本,從企業角度來看是一件節省成本的好事,從社會的角度上來講,降低了單位成本則提高了消費者剩餘,減少了福利損失,這樣看來,雲端計算被規劃為“十三五”重點專案之一也就不奇怪了,另外隨著無伺服器(Serverless)、微服務(Micro-Service)、雲原生(Cloud Native)、服務化網格(Service Mesh)等技術或理論的成熟,有理由相信,雲端計算的發展還有很大的上升空間。

以上是個人觀點,如果有問題或錯誤,歡迎留言討論指正,碼字不易,為了寫本篇文章員外僅維基詞條就閱讀大幾十篇,著實辛苦,如果覺得寫的不錯,求關注、求點贊、求轉發。

掃碼關注公眾號,第一時間獲得更新

參考

https://en.wikipedia.org/wiki/Cloud_computing

https://docs.aws.amazon.com/lambda/index.html

https://github.com/cncf/toc/blob/master/DEFINITION.md

https://en.wikipedia.org/wiki/Serverless_computing

https://en.wikipedia.org/wiki/Virtualization

https://en.wikipedia.org/wiki/OS-level_virtualization

https://en.wikipedia.org/wiki/Docker_(software)

https://en.wikipedia.org/wiki/Desktop_virtualization

https://en.wikipedia.org/wiki/Hardware-assisted_virtualization

https://en.wikipedia.org/wiki/Paravirtualization

https://en.wikipedia.org/wiki/Full_virtualization

https://en.wikipedia.org/wiki/Hypervisor