當我們在聊 Serverless 時你應該知道這些
作者 | 楊澤強(竹澗)阿里雲技術專家
說起當前最火的技術,除了最新的區塊鏈、AI,還有一個不得不提的概念是 Serverless。Serverless 作為一種新型的網際網路架構,直接或間接推動了雲端計算的發展,從 AWS Lambda 到阿里雲函式計算,Serverless 一路高歌,同時基於 Serverless 的輕量計算開始登入雲端計算的舞臺,本文將從兩個部分展開:
- 介紹 Serverless 的概念,歷史及其現狀與未來的思考;
- Serverless Container 的概念及現狀。
一、聊聊 Serverless
前文講到 Serverless 是一種新型的網際網路架構,目前尚沒有官方權威的定義,可以認為:
Serverless 無伺服器架構是基於網際網路的系統,其中應用開發不使用常規的服務程式。相反,它們僅依賴於第三方服務(例如 AWS Lambda 服務),客戶端邏輯和服務託管遠端過程呼叫的組合。
AWS Lambda 作為 Serverless 最早的框架產品,在 2014 年由亞馬遜推出,但最早的 Serverless 概念並不是由亞馬遜提出,下面我們來簡單聊聊 Serverless 的歷史。
Serverless 歷史
發軔之始
2012 年雲基礎設施服務提供商 http:// Iron.io 的副總裁 Ken 提出 軟體的未來 , 首次提出來 Serverless 概念, 以下是原文的一段摘錄:
Even with the rise of cloud computing, the world still revolves around servers. That won’t last, though. Cloud apps are moving into a serverless world, and that will bring big implications for the creation and distribution of software and applications.
初出茅廬
AWS Lambda 產品的釋出可以認為是 Serverless 的里程碑,在此之前 Serverless 幾乎是停留在概念期,直到 14 年 Lambda 釋出,讓“Serverless”提高到一個全新的層面,為雲中執行的應用程式提供了一種全新的系統體系架構,**Serverless 開始正式走向雲端計算的舞臺。
嶄露頭角
在 AWS 釋出 Lambda 之後,眾多 IaaS 及 Pass 廠商爭相入市, Google Cloud Functions, Azure Funcions, IBM OpenWhisk, 阿里雲函式計算, 短短數年時間 Serverless 產品已遍地開花。
未來已來
隨著容器技術、IoT、5G、區塊鏈等技術的快速發展, 技術上對去中心化,輕量虛擬化,細粒度計算等技術需求愈發強烈,而 Serverless 必將借勢迅速發展, 未來 Serverless 將在雲端計算的舞臺上大放異彩!
雲端計算發展看 Serverless
首先,拋一個總結性觀點:雲端計算的發展從IaaS、PaaS、SaaS,到最新的 BaaS、FasS,在這個趨勢中 serverless (去伺服器化)越來越明顯,而 Serveless 的完善帶給雲端計算將會是一次完美進化!
眾所周知,雲端計算經歷了從 IDC -> IaaS -> PaaS -> Serverless/FaaS 的發展歷程,下面對這些概念做一些基本介紹。
IaaS
IaaS(Infrastructure as a Service) 基礎設施即服務,服務商提供底層/物理層基礎設施資源(伺服器,資料中心,環境控制,電源,伺服器機房),使用者需要透過 IaaS 提供的服務平臺購買虛擬資源,選擇作業系統、安裝軟體、部署程式、監控應用。
目前知名的 IaaS 平臺有 AWS、Azure、Google Cloud Plantform、阿里雲以及開源的 OpenStack 等。
PaaS
PaaS (Platform as a Service) 平臺即服務,服務商提供基礎設施底層服務,提供作業系統(Windows,Linux)、資料庫伺服器、Web 伺服器、負載均衡器和其他中介軟體,相對於 IaaS 客戶僅僅需要自己控制上層的應用程式部署與應用託管的環境。
目前知名的 PaaS 平臺有 Amazon Elastic Beanstalk,Azure,Google App Engine,VMware Cloud Foundry 等。
SaaS
SaaS (Software as a Service) 軟體即服務, 服務商提供基於軟體的解決方案,如 OA、CRM、MIS、ERP、HRM、CM、Office 365、iCloud 等,客戶不需考慮任何形式的專業技術知識,只需要透過服務商平臺獲取軟體使用即可。
BaaS
BaaS (Backend as a Service) 後端即服務,服務商為客戶(開發者)提供整合雲後端的服務,如提供檔案儲存、資料儲存、推送服務、身份驗證服務等功能,以幫助開發者快速開發應用。
FaaS
FaaS (Function as a Service) 函式即服務,服務商提供一個平臺,允許客戶開發、執行和管理應用程式功能,而無需構建和維護基礎架構。 按照此模型構建應用程式是實現“無伺服器”體系結構的一種方式,通常在構建微服務應用程式時使用。
IaaS、PaaS、FaaS 對比
舉個例子,比如小明想開一個水果店:
- IDC:如果蓋房子,裝修、上架水果這些工作都是小明自己來做;
- IaaS:如果小明房子是租的,裝修、上架水果是自己做;
- PaaS: 如果小明房子是租的,可是房子已經裝修好了,但是上架水果要自己來做;
- FaaS:如果有一個商家提供裝修好的水果店,小明只負責把水果送過來,其餘上架工作都由商家來做。
總結
從 IDC → IaaS,使用者不用關注真實的物理資源。
從 IaaS → PaaS,使用者不再關注作業系統,資料庫,中介軟體等基礎軟體。
從 PaaS → BaaS/FaaS, 使用者可以很少甚至不用關注 backend,app 可以簡化為一個單頁面程式。
可以說,Serverless 是雲端計算發展到一定階段的必然產物,雲端計算作為普惠科技,發展到最後一定是綠色科技(最大程度利用資源,減少空閒資源浪費)、大眾科技(成本低,包括學習成本及使用成本)的產品,而 Serverless 將很好的詮釋這些!
Serverless/FaaS 模型
Serverless 是基於事件驅動的程式設計範型,其底層的計算平臺一般為輕量計算,比如容器計算 Docker。
針對該模型本文不再贅述, 下面以 AWS Lambda 及阿里雲函式計算為例,簡單介紹該模型。
AWS Lambda
大致流程如下:
- UI 驅動,透過模擬滑鼠點選觸發事件;
- 當觸發事件增多時,lambda 例項自動擴容;
- 當觸發事件減少時,lambda 例項自動縮容。
阿里雲函式計算
流程大致如下:
- UI/Event/Message Driven 觸發事件;
- 使用者 Function 會 package 為一個 docker 映象;
- 事件排程系統配合 Docker 叢集執行 Docker 容器來執行 Function
Serverless 價值與影響
低成本
- 運營成本,Serverless 將使用者的伺服器、資料庫、中介軟體委託於 BaaS/FaaS,使用者將不再參與基礎設施及軟體的維護,尤其在大規模的叢集運營上成本大幅度降低;
- 開發成本,對比 IaaS 或者 PaaS 平臺的伺服器或者作業系統,Serverless 的架構中,使用者操作的是服務化的元件比如儲存服務,授權服務等,可以縮短開發週期,降低開發難度。
真正的按需計費
Serverless/FaaS 區別於 IaaS/PaaS 預先分配計算資源的計費方式,其計費方式通常是按請求次數及執行時間,一方面可以最大程度利用資源,另一方面真正的按需計費降低使用者的資源成本。
高擴充套件
Serverless 架構一個顯而易見的優點即“橫向擴充套件是完全自動的、有彈性的、且由服務提供者所管理”。
“綠色”計算
據統計,商業和企業資料中心的典型伺服器僅提供 5%~15% 的平均最大處理能力的輸出,本質上這是對社會資源的一種浪費。而在 Serverless 架構下,提供商將提供更細力度的計算能力,最大限度滿足實時需求,資源利用率將大幅度提升,可以認為相對 IaaS 與 PaaS,Serverless/FaaS 是一種 “綠色” 計算。
NoOps
運維的發展經歷了人肉運維、自動化運維、DevOps、AiOps 等,而 Serverless 帶來一種新的運維模式,這種模式下使用者需要管理的只有 Code 可以認為 NoOps。
Serverless 應用場景
- 事件驅動以及響應式架構
- IoT 物聯網場景中低頻請求
- 請求對及時響應需求不夠
- 固定時間觸發計算資源利用低的業務
- 流量突發場景
- 比如短時間大流量影片轉碼
- 短週期內的流量峰值
- 跨雲與混合雲場
- 邊緣計算
- 其它 ...
Serverless 未來的一些思考
細粒度的計算資源
目前主流的 Serverless/FaaS 技術底層的計算環境通常是容器比如 Docker,容器技術是一種比硬體虛擬化更輕量的實現,使用者可以在虛擬機器上執行大量的容器,可以更大程度的利用計算資源。
而Serverless 的需求可能是更細粒度的計算資源,比如最近華為釋出的 CCI 產品容器的規格已經支援千分之一核,相信千分之一核只是開始,未來 Serverless 在細粒度資源使用上將發揮無限可能。
統一的容器排程模型
從當前 Serverless/FaaS 及容器生態的發展來看,容器基本都是執行在雲主機之上比如 aws 的 ec2,阿里雲的 ecs。
由於雲廠商實現方式及不同產品的差異性,容器的排程框架選擇不盡相同,比如有的廠商其 Serverless 產品是基於 Kubernetes 管理雲主機叢集進行容器編排及排程(比如華為的 CCI),而有的產品如阿里雲的函式計算產品是基於自研的 Agent 進行容器排程。那麼為什麼沒有一種產品可以為不同的 Serverless 服務提供通用的容器排程能力呢?
生態圈多樣化
Serverless 的發展必然會帶動其周邊生態的完善,比如 BaaS 及 FaaS 產品的形態將多樣化輸出,舉個例子:
Serverless 架構下使用者的 Code 是沒有服務端的,而這些服務將由雲廠商以 BaaS 的服務形態提供,隨著 Serverless 的發展,必然會催生多樣化的 BaaS 服務。
產品抽象輸出
Serverless 是雲端計算普惠科技的重磅技術!Serverless 的出現將開發者從複雜的硬體及軟體環境中解脫出來,未來可以想象 Serverless 的產品將會以更加簡單的方式呈現給使用者。舉個例子:大家熟知的樂高積木,不同的小零件按照不同的方式組裝,最終得到的作品是多樣化的。
而 Serverless 天生具備這種優勢,可以想象如果 Function 以服務化的方式抽象,開發者開發一個 Cloud App 需要做的事情就是在無數的 Function 裡面挑選自己需要的“積木”,然後透過一種視覺化的工具進行"積木"組合!
二、Serverless Container
前文講了一些 Serverless 生態的概念及現狀,從當前主流的 Serverless/FaaS 框架,如 AWS Lambda、IBM OpenWhisk、 http:// Iron.io 、阿里雲函式計算分析來看,其底層的計算資源通常是 Docker 容器。可以認為 Serverless 構建於容器 (Docker) 之上!
什麼是 Serverless Container
Serverless Container(無伺服器容器),意味著使用者不再需要關注容器叢集和伺服器,只需關注 Docker 容器或者 Docker Image 即可。
透過分析業界主流的的 Serverless Container 產品如 AWS Fargate, Azure ACI, 華為 CCI,可以看出:
- Serverless Container 提供了更為簡單的體驗,使用者不再需要理解容器編排技術如 K8s,Swarm;
- Serverless Container 提供了更細粒度的的能力,比如微核粒度的 CPU 資源和 MB 粒度的記憶體資源;
- Serverless Container 提供了將容器作為基礎計算單元的思路。
Serverless Container VS Kubernets
Kuberntes (K8s) 是谷歌開源的容器管理系統,類似的產品還有 Docker Swarm、Apache Mesos。這些優秀的叢集管理系統,尤其是 K8s 已經在生成得到了充分驗證,從使用角度來說,K8s 需要使用者具備容器及容器編排、叢集管理等多方面的專業知識,而 Serverless Container 對使用者遮蔽了容器叢集管理,使用者使用起來將更簡單!
結論:Serverless Container 在容器產品形態上是高於 Kubernetes 的,事實上大部分的 Serverless Container 產品都基於或者相容 Kubernetes。
Serverless Container VS Serverless/FaaS
根據上文的分析:
- Serverless Container 對使用者提供的是一種容器計算資源,使用者不需要關心容器叢集,只需要定製 vCpu、mem 及 Docker Image;
- Serverless/FaaS 提供的是一種服務化的計算能力,使用者同樣不用關心計算叢集,只需指定 vCpu,mem 及 Code。
結論:FaaS 及 Serverless Container 的底層計算資源都是 Docker 容器!
本文為雲棲社群原創內容,未經允許不得轉載。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949601/viewspace-2659906/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 現在寫 PHP,你應該知道這些PHP
- 當我們在聊 RN 時,我們在聊什麼 | 技術點評
- Python——你應該知道這些Python
- 當談到 GitLab CI 的時候,我們該聊些什麼(上篇)Gitlab
- 關於DNS,你應該知道這些DNS
- 當談到 GitLab CI 的時候,我們都該聊些什麼(下篇)Gitlab
- 關於資料科學家,我們應該知道的這些事資料科學
- 當面試官問執行緒池時,你應該知道些什麼?面試執行緒
- 理解大型分散式網站你應該知道這些概念分散式網站
- 當我們談論Promise時,我們說些什麼Promise
- 當我們談優化時,我們談些什麼優化
- 當我們談 Java 併發的時候,你們在談什麼?Java
- 華為鴻蒙OS釋出會解析,這些乾貨你應該知道鴻蒙
- 蘋果推watchOS 3系統 這些新功能你應該知道蘋果
- 當我們在討論遊戲社群時,我們在討論什麼?遊戲
- 中科三方:關於SSL證書你應該知道這些事
- 當我們在談論HTTP快取時我們在談論什麼HTTP快取
- 當你們在談論React和Vue的時候,我在用MithrilReactVueMIT
- 淺談AsyncLocal,我們應該知道的那些事兒
- 當我們談論格鬥遊戲時,我們在談論什麼遊戲
- 你應該知道的一些Linux技巧Linux
- 這應該是你們想要的 DOS 命令
- 網站為什麼需要SSL證書?這些優勢你應該知道!網站
- 如果當初學習程式設計時能有人給我這些忠告該多好程式設計
- 這次我們聊一下CookieCookie
- 當我談跑酷遊戲時,我在談些什麼遊戲
- 你知道我們平時在CSS中寫的%都是相對於誰嗎?CSS
- 當我們說一款遊戲“涼涼”時,我們在說什麼?遊戲
- 當我們說外掛系統的時候,我們在說什麼
- 我們在編寫python程式碼時應該注意那幾件事!Python
- 你應該知道的FlutterFlutter
- 你應該知道的RocketMQMQ
- 當提到“事件驅動”時,我們在說什麼?事件
- 在大家熱議Vicarious AI那篇Science論文時,我們和這家公司的CTO聊了聊(迴應LeCun批判)AILeCun
- 在大家熱議Vicarious AI那篇Science論文時,我們和這家公司的CTO聊了聊(回應LeCun批判)AILeCun
- 當我在玩python的時候我玩些什麼Python
- 初識Python,我想你應該瞭解這些...Python
- 瞭解這些資訊,你會知道在ESXi5.0 的虛擬化系統下檔案出現故障時,我們能做些什麼?