做爲「十三五」重點規劃產業之一,雲計算究竟是什麼?又會怎樣發展?最近興起的雲原生(Cloud Native)和無服務器架構(Serverless)又與雲計算有什麼關係?本文將以雲計算的發展爲路線,爲你們科普雲計算的概念與現狀,不管讀者是開發、測試、抑或是產品、管理者都能在本文中有所收穫。php
縱觀整個服務器的發展歷程,能夠分爲三階段,自建服務器時代、服務器託管與租賃時代、雲計算時代。html
早期的計算機主要分爲兩種使用方式,組織自建機房與租用,自建機房很好理解,就是買一臺放在公司本身用,租用通常是製造商提供租賃使用,按時付費,是否是有點今天雲服務器的意思?git
早期的IBM 650要價50萬美金,或能夠每個月3500 美金的價格出租。github
至 Web 時代來臨,IT 公司大量採用 B/S(瀏覽器/服務端) 架構,客戶端愈來愈輕量化,大部分資源存儲在服務端,致使服務器需求激增,因而服務器託管業務應運而生,早期多爲 ISP 即互聯網服務提供商(Internet Service Provider)承接,簡單來講就是買一臺服務器(也能夠直接使用 ISP 的服務器),放到 ISP 機房由 ISP 負責維護,好比分配 IP,網絡帶寬,免去要申請商業化寬帶以及管理服務器的麻煩,節省辦公空間。數據庫
發展到這時,租用 ISP 的服務器已經有了雲計算的雛形了。但仍是有不少缺陷:編程
服務器託管與租賃現在也大規模存在。瀏覽器
辦法總比問題多,這些問題伴隨着 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)。
其餘擴展
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),對比今天的雲產品本質上沒有區別,只是在資源上更加細化,服務上更加完善而已。咱們來看一下雲計算的歷程:
國內雲計算起步稍晚:
注:國內部分來自百度百科,不負責準確性,其餘國內雲廠商查不到準確上線時間。
前文說過,雲計算髮展本質上就是逐步細化資源與完善服務,咱們來看一下雲產品發展至今,到底發展了什麼:
灰色表明雲廠商提供服務,藍色表明 IT 公司本身管理的部分,雲計算越成熟,IT 公司負擔越少、成本越低。對比託管服務,咱們發現雲計算幾乎彌補了全部託管服務的缺點,好比亞馬遜的 EC2 服務器宣佈能夠保證 99.99% 的可用性,每月宕機時間不超過 0.01%,即 4.38 分鐘。
現在大規模普及的 PaaS 已經提供了絕大多數的服務,SaaS 並不適合通用場景,雲計算若想再進一步只能從兩個方向入手:
方案一沒有可行性,雲提供商不可能開發市面上全部的業務系統,而且雲廠商也沒有精力作。咱們從方案二入手,根據上圖咱們能夠得出結論: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