提及當前最火的技術,除了最新的區塊鏈,AI,還有一個不得不提的概念是Serverless。Serverless做爲一種新型的互聯網架構直接或間接推進了雲計算的發展,從AWS Lambda到阿里雲函數計算,Serverless一路高歌,同時基於Serverless的輕量計算開始登陸雲計算的舞臺,本文將從兩個部分展開:docker
介紹 Serverless的概念,歷史及其現狀與將來的思考。
Serverless Container的概念及現狀。數據庫
前文講到serverless是一種新型的互聯網架構,目前尚沒有官方權威的定義,能夠認爲:編程
Serverless無服務器架構是基於互聯網的系統,其中應用開發不使用常規的服務進程。相反,它們僅依賴於第三方服務(例如AWS Lambda服務),客戶端邏輯和服務託管遠程過程調用的組合。後端
AWS Lambda 做爲Serverless最先的框架產品由亞馬遜在2014年推出,但最先Serverless概念的並非由亞馬遜提出,下面咱們簡單來聊聊Serverless的歷史。服務器
Serverless 歷史架構
發軔之始
2012年雲基礎設施服務提供商Iron.io的副總裁Ken 提出軟件的將來 ,首次提出來Serverless概念, 如下是原文的一段摘錄:app
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產品已遍地開花。less
將來已來
隨着容器技術,IoT,5G,區塊鏈等技術的快速發展, 技術上對去中心化,輕量虛擬化,細粒度計算等技術需求愈發強烈,而Serverless必將借勢迅速發展,將來Serverless將在雲計算的舞臺上大放異彩!
首先,拋一個總結性觀點:雲計算的發展從IaaS,PaaS,SaaS,到最新的BaaS,FasS,在這個趨勢中serverless(去服務器化)愈來愈明顯,而Serveless的完善帶給雲計算將會是一次完美進化!
總所周知,雲計算經歷了從IDC -> IaaS -> PaaS -> Serverless/FaaS 的發展歷程,下面對這些概念作一些基本介紹。
IaaS
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 36五、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是基於事件驅動的編程範型,其底層的計算平臺通常爲輕量計算好比容器計算Docker。
針對該模型本文再也不贅述, 下面以AWS Lambda及阿里雲函數計算爲例,簡單介紹該模型。
AWS Lambda
大體流程以下:
UI驅動,經過模擬鼠標點擊觸發事件
當觸發事件增多時lambda實例自動擴容
當觸發事件減小時lambda實例自動縮容
流程大體以下:
低成本
真正的按需計費
Serverless/FaaS區別於IaaS/PaaS預先分配計算資源的計費方式,其計費方式一般是按請求次數及運行時間,一方面能夠最大程度利用資源,另外一方面真正的按需計費能夠下降用戶的資源成本。
高擴展
Serverless架構一個顯而易見的優勢即「橫向擴展是徹底自動的、有彈性的、且由服務提供者所管理」。
「綠色」計算
據統計,商業和企業數據中心的典型服務器僅提供5%~15%的平均最大處理能力的輸出,本質上這是對社會資源的一種浪費。而在Serverless架構下,提供商將提供更細力度的計算能力最大限度知足實時需求,資源利用率將大幅度提高,能夠認爲相對IaaS與PaaS Serverless/FaaS是一種 「綠色」 計算。
NoOps
運維的發展經歷了人肉運維,自動化運維,DevOps,AiOps等,而Serverless帶來一種新的運維模式,這種模式下用戶須要管理的只有Code能夠認爲NoOps。
IoT物聯網場景中低頻請求
請求對及時響應需求不夠
固定時間觸發計算資源利用低的業務
好比短期大流量視頻轉碼
短週期內的流量峯值
細粒度的計算資源
目前主流的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生態的概念及現狀,從當前主流Serverless/FaaS 框架如AWS Lambda,IBM OpenWhisk,Iron.io,阿里雲函數計算分析來看,其底層的計算資源一般是Docker容器。能夠認爲Serverless構建於容器(Docker)之上!
什麼是Serverless Container
Serverless Container(無服務器容器),用戶再也不須要關注容器集羣和服務器,只需關注Docker容器或者Docker Image便可。
經過分析業界主流的的Serverless Container產品如 AWS Fargate, Azure ACI, 華爲CCI 能夠看出
kuberntes(k8s) 是谷歌開源的容器管理系統,相似的產品還有Docker Swarm, Apache Mesos以及集團內的產品Sigma。無疑這些優秀的集羣管理系統尤爲是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容器!