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

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

作為“十三五”重點規劃產業之一,雲計算到底是什麼?又會怎樣發展?最近興起的雲原生(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)等技術或理論的成熟,有理由相信,雲計算的發展還有很大的上升空間。


分享到:


相關文章: