無(wú)服務(wù)器架構(gòu)是應(yīng)用軟件架構(gòu)的未來(lái)嗎?
Serverless已經(jīng)在軟件世界掀起了一場(chǎng)革命,業(yè)界普遍認(rèn)為它是云計(jì)算和軟件架構(gòu)的未來(lái),但還有很多伙伴,并不了解Serverless。所以呢,今天我就帶大家來(lái)徹底認(rèn)識(shí)一下Serverless,以免大家錯(cuò)過(guò)這波浪潮。內(nèi)容分為四部分:
應(yīng)用軟件架構(gòu)和托管模型的演變史
Serverless詳解
Serverless常見(jiàn)服務(wù)商
Serverless的未來(lái)發(fā)展
全文約12800字,讀完之后你對(duì)Serverless的歷史、現(xiàn)狀和未來(lái),會(huì)有清晰的認(rèn)知,有助于你評(píng)估公司的業(yè)務(wù)要不要采用Serverless架構(gòu)、采用哪家的Serverless方案,也有助于你評(píng)估自己要不要學(xué)習(xí)實(shí)踐Serverless。
讓我們開(kāi)始挑戰(zhàn)吧!
應(yīng)用軟件架構(gòu)和托管模型的演變史
在過(guò)去的幾十年里,應(yīng)用軟件架構(gòu)和托管模型經(jīng)歷了從中央主機(jī)到無(wú)服務(wù)器的重大轉(zhuǎn)變。
中央主機(jī)時(shí)代
20世紀(jì)70~80年代,是中央主機(jī)時(shí)代。
由于中央主機(jī)非常昂貴(IBM650小型機(jī)要價(jià)就高達(dá)50萬(wàn)美金),企業(yè)的一般做法是,買(mǎi)一臺(tái)大型機(jī)或小型機(jī),“供奉”在自建機(jī)房中,安排一名主機(jī)管理員,集中控制和管理中央主機(jī),其他人員要通過(guò)計(jì)算機(jī)做某種操作,必須經(jīng)過(guò)相關(guān)人員批準(zhǔn)才可以。
這個(gè)時(shí)代,計(jì)算機(jī)和信息技術(shù)的主要用途就是為了達(dá)成商業(yè)策略而為業(yè)務(wù)建造各種系統(tǒng),比如財(cái)務(wù)系統(tǒng)、工資管理系統(tǒng)、核心業(yè)務(wù)系統(tǒng)等。這些系統(tǒng)的核心功能,都運(yùn)行在中央主機(jī)上,而客戶(hù)端終端只具備基礎(chǔ)功能,通常是用來(lái)在屏幕上輸入和顯示數(shù)據(jù)。

PC時(shí)代
1984年,IBM公司推出了以80286處理器為核心組成的16位增強(qiáng)型個(gè)人計(jì)算機(jī)IBM PC/AT,并采取技術(shù)開(kāi)放策略,個(gè)人計(jì)算機(jī)開(kāi)始風(fēng)靡,PC時(shí)代來(lái)臨。
隨著PC時(shí)代的發(fā)展,客戶(hù)端/服務(wù)器架構(gòu)(即Client/Server架構(gòu),C/S架構(gòu))興起。在C/S架構(gòu)中,服務(wù)器負(fù)責(zé)數(shù)據(jù)的管理,客戶(hù)端負(fù)責(zé)完成與用戶(hù)的交互任務(wù),承載大量的業(yè)務(wù)邏輯和展示邏輯。
C/S架構(gòu)的主要特點(diǎn)是交互性強(qiáng)、具有安全的存取模式、響應(yīng)速度快、方便處理大量數(shù)據(jù)。但是C/S架構(gòu)缺少通用性,系統(tǒng)維護(hù)、升級(jí)往往需要重新設(shè)計(jì)和開(kāi)發(fā),維護(hù)和管理難度高。C/S架構(gòu)在局域網(wǎng)中應(yīng)用較多。
20世紀(jì)90年代中期發(fā)生了互聯(lián)網(wǎng)革命,Web興起,瀏覽器普及,基于瀏覽器構(gòu)建Web應(yīng)用成為現(xiàn)實(shí),B/S架構(gòu)(即Browser/Server架構(gòu),瀏覽器/服務(wù)器架構(gòu))開(kāi)始興起。在B/S架構(gòu)中,服務(wù)器承擔(dān)主要的事務(wù)邏輯實(shí)現(xiàn),基于瀏覽器的Web應(yīng)用成了客戶(hù)端,負(fù)責(zé)顯示邏輯,壓力很小,并且因?yàn)闉g覽器的通用性,Web應(yīng)用無(wú)需安裝,打開(kāi)網(wǎng)頁(yè)就能使用,非常方便。
C/S架構(gòu)和B/S架構(gòu)的迅猛發(fā)展,推動(dòng)著x86服務(wù)器贏得了時(shí)代的青睞,取代大型機(jī)和小型機(jī),成了服務(wù)器的行業(yè)標(biāo)準(zhǔn)。
隨著互聯(lián)網(wǎng)的發(fā)展,IT公司紛紛基于B/S架構(gòu)對(duì)外提供Web服務(wù),他們把買(mǎi)來(lái)的x86服務(wù)器放進(jìn)互聯(lián)網(wǎng)服務(wù)提供商(Internet Service Provider,ISP)的機(jī)房?jī)?nèi),由ISP負(fù)責(zé)維護(hù),比如分配IP、網(wǎng)絡(luò)帶寬,免去申請(qǐng)商業(yè)化寬帶以及管理服務(wù)器的麻煩,于是服務(wù)器托管業(yè)務(wù)開(kāi)始蓬勃發(fā)展。

后來(lái)ISP又發(fā)展出服務(wù)器租賃業(yè)務(wù)——客戶(hù)自己不買(mǎi)服務(wù)器,而是租用ISP的服務(wù)器。
ISP服務(wù)器租賃模式,算是后來(lái)云計(jì)算的雛形了,但它有比較多的缺陷:
一臺(tái)服務(wù)器只能租賃給一個(gè)客戶(hù),無(wú)法共享資源池
服務(wù)器物理獨(dú)立,很難介入監(jiān)控系統(tǒng)狀態(tài)
費(fèi)用很高,服務(wù)器要錢(qián)、托管也要錢(qián),對(duì)中小企業(yè)不友好
服務(wù)器資源利用率不高,比如一家中小企業(yè)的Web服務(wù)就很難占滿(mǎn)一臺(tái)8核心CPU、16G內(nèi)存的服務(wù)器的資源
單點(diǎn)故障,如果服務(wù)器損壞,很難快速恢復(fù)服務(wù),甚至可能無(wú)法恢復(fù)服務(wù)
市場(chǎng)需要更好的資源分配與管理模式。
云計(jì)算1.0
緣起于20世紀(jì)50年代末的虛擬化技術(shù),在20世紀(jì)末、21世紀(jì)初,隨著全虛擬化、半虛擬化及硬件輔助虛擬化等技術(shù)的涌現(xiàn),迅速發(fā)展成熟,x86服務(wù)器的虛擬化隨之完成,一臺(tái)物理服務(wù)器上,可以構(gòu)建出幾臺(tái)甚至幾十臺(tái)虛擬主機(jī),物理主機(jī)托管所遇到的資源分配與管理難題,迎刃而解,主機(jī)托管服務(wù)從物理機(jī)托管轉(zhuǎn)向虛擬機(jī)托管,云計(jì)算1.0時(shí)代拉開(kāi)序幕。
2000年,亞馬遜開(kāi)始基于Xen虛擬化技術(shù)開(kāi)發(fā)EC2(Elastic Compute Cloud,彈性計(jì)算云),產(chǎn)品主要用于內(nèi)部基礎(chǔ)設(shè)置。2005年,亞馬遜將這一技術(shù)提供給簽訂了保密協(xié)議的一些客戶(hù)。
2006年8月9日,Google首席執(zhí)行官埃里克·施密特在搜索引擎大會(huì)上首次提出“云計(jì)算”(Cloud Computing)的概念。
2006年8月25日,亞馬遜正式發(fā)布EC2,這是歷史上第一個(gè)商業(yè)化的IaaS服務(wù)。EC2的發(fā)布,宣布云計(jì)算時(shí)代正式到來(lái)。
由于亞馬遜率先探索云計(jì)算并在內(nèi)部和客戶(hù)中獲得大量應(yīng)用,它在這個(gè)新興領(lǐng)域建立了強(qiáng)大的優(yōu)勢(shì),當(dāng)阿里巴巴、Google、IBM、微軟等公司開(kāi)始發(fā)力云計(jì)算時(shí),亞馬遜已經(jīng)初步形成涵蓋IaaS、PaaS的產(chǎn)品體系,確立了在IaaS和云服務(wù)領(lǐng)域的全球領(lǐng)導(dǎo)地位。
2008年,云計(jì)算的市場(chǎng)認(rèn)可度越來(lái)越高,越來(lái)越多的企業(yè),開(kāi)始基于云來(lái)構(gòu)建自己的業(yè)務(wù)服務(wù)。
互聯(lián)網(wǎng)流媒體視頻內(nèi)容行業(yè)的領(lǐng)導(dǎo)品牌Netflix,2009年時(shí),其所有客戶(hù)流量都在自己的數(shù)據(jù)中心,然而到2010年年底,這些流量中的大部分已經(jīng)運(yùn)行在亞馬遜的公有云解決方案AWS上了。Netflix將服務(wù)全面遷移到AWS,讓亞馬遜來(lái)負(fù)責(zé)基礎(chǔ)設(shè)置問(wèn)題,自己則將精力專(zhuān)注于構(gòu)建和提高業(yè)務(wù)應(yīng)用,公司業(yè)務(wù)得以快速發(fā)展。
2010年10月,一款名為Instagram的照片分享應(yīng)用發(fā)布。第一天有25000人注冊(cè)使用。3個(gè)月后,Instagram的用戶(hù)激增至100萬(wàn),然后這個(gè)數(shù)字很快達(dá)到1000萬(wàn)。一年半以后,Instagram的用戶(hù)增長(zhǎng)到接近3000萬(wàn)。
Instagram之所以能夠如此迅速地發(fā)展,是因?yàn)樗暮笈_(tái)構(gòu)建在云上,可以按需使用計(jì)算資源,他們只用專(zhuān)注于應(yīng)用架構(gòu)和用戶(hù)體驗(yàn)這兩項(xiàng)他們所擅長(zhǎng)的事情。
隨著技術(shù)和市場(chǎng)的演進(jìn),云服務(wù)發(fā)展出IaaS、PaaS和SaaS三種模式。

到2013年,云計(jì)算的實(shí)驗(yàn)性階段結(jié)束,在初創(chuàng)企業(yè)和中小型企業(yè)中被廣為接受,但是大型企業(yè)的步伐仍然比較遲緩。
這個(gè)階段,企業(yè)的后端服務(wù),運(yùn)行在云端的虛擬機(jī)中,每一個(gè)虛擬機(jī)使用獨(dú)立的操作系統(tǒng)內(nèi)核與運(yùn)行時(shí)。
設(shè)想一下,同一個(gè)客戶(hù)租用了多臺(tái)虛擬機(jī),這些虛擬機(jī)的操作系統(tǒng)版本、運(yùn)行時(shí)都一模一樣,它們也運(yùn)行在同一個(gè)物理服務(wù)器上,可它們無(wú)法共用資源。從這樣的場(chǎng)景設(shè)想就可以看出,這個(gè)階段的虛擬主機(jī)托管,仍然存在一定的資源浪費(fèi)。
云計(jì)算2.0(容器化)
2013~2014年,微服務(wù)架構(gòu)流行起來(lái)。
2013年3月,dotCloud公司的創(chuàng)始人之一,Docker之父Solomon?Hykes正式?jīng)Q定將其容器技術(shù)項(xiàng)目Docker開(kāi)源。之后Docker人氣迅速攀升,發(fā)展進(jìn)入快車(chē)道,每一個(gè)月都會(huì)發(fā)布一個(gè)版本。
2014年6月9日,Docker 1.0版本正式發(fā)布。云計(jì)算從“云主機(jī)托管”進(jìn)入了容器時(shí)代。
Docker在應(yīng)用程序級(jí)別實(shí)現(xiàn)虛擬化,直接復(fù)用本地主機(jī)的操作系統(tǒng),而傳統(tǒng)的虛擬化方式則是硬件虛擬化,要在本地主機(jī)上仿真出一臺(tái)或多臺(tái)具備各種硬件的虛擬計(jì)算機(jī),用戶(hù)要給每臺(tái)虛擬機(jī)單獨(dú)安裝一個(gè)操作系統(tǒng)。
兩種方式的對(duì)比如下圖所示。

Docker以更為輕量級(jí)的方式解決了資源分配問(wèn)題,比如一個(gè)VM的大小大概是20GB,而運(yùn)行著相同應(yīng)用程序的容器大概只有200MB。
虛擬化技術(shù)因?yàn)镈ocker的出現(xiàn)進(jìn)入了新階段。
2014年11月,AWS發(fā)布了ECS(Amazon EC2 Container Service),一個(gè)高性能容器管理服務(wù),支持Docker容器。
Google在Docker項(xiàng)目剛興起時(shí)(2014年6月),開(kāi)源了與容器技術(shù)相關(guān)的內(nèi)部系統(tǒng)Borg,Borg后來(lái)演變?yōu)镵ubernetes(簡(jiǎn)稱(chēng)為K8S)。
2015年7月22日,K8S迭代到v1.0并正式對(duì)外公布。但很長(zhǎng)一段時(shí)間里,K8S并沒(méi)有顯現(xiàn)出對(duì)Docker容器編排的另外兩大工具Swarm和Mesos的特別優(yōu)勢(shì)。
2015年12月11日,Google、RedHat等開(kāi)源基礎(chǔ)設(shè)施領(lǐng)域的玩家們牽頭發(fā)起的CNCF(Cloud Native Computing Foundation)基金會(huì)(即云原生計(jì)算基金會(huì))正式成立。云原生計(jì)算基金會(huì)的口號(hào)是,堅(jiān)持和整合開(kāi)源技術(shù)來(lái)讓編排容器作為微服務(wù)架構(gòu)的一部分。
Google將Kubernetes托管給了CNCF基金會(huì)。Kubernetes社區(qū)在 2016 年之后得到了空前的發(fā)展。后來(lái),隨著Docker在其產(chǎn)品中集成Kubernetes,Kubernetes成了云化容器編排的標(biāo)準(zhǔn)。
Docker解決了資源分配問(wèn)題,Kubernetes解決了云與容器的結(jié)合問(wèn)題,云計(jì)算告別了僅僅租賃服務(wù)器的時(shí)代,真正成熟,進(jìn)入2.0時(shí)代。
在這個(gè)時(shí)代,后端服務(wù)運(yùn)行在容器之中,容器即服務(wù)(CaaS),云服務(wù)形態(tài)也演變成下面的形式。

Serverless時(shí)代
容器化技術(shù)進(jìn)一步降低了服務(wù)器與運(yùn)維成本,但這個(gè)時(shí)候,企業(yè)依然需要運(yùn)維自己的后端服務(wù),運(yùn)維成本仍在。運(yùn)維成本還可以進(jìn)一步降低嗎?
同時(shí),IT企業(yè)還有一個(gè)更大的成本——研發(fā)成本。能否有一種方案,可以簡(jiǎn)化后端服務(wù)的編碼從而降低企業(yè)成本呢?
答案是無(wú)服務(wù)器(Serverless)架構(gòu)。
無(wú)服務(wù)器架構(gòu)將服務(wù)器基礎(chǔ)架構(gòu)從應(yīng)用程序開(kāi)發(fā)人員那里完全抽象出來(lái)了,開(kāi)發(fā)人員無(wú)需關(guān)心服務(wù)器,只需將業(yè)務(wù)服務(wù)編寫(xiě)為函數(shù),并將這些函數(shù)部署到云基礎(chǔ)架構(gòu)中。
這樣一來(lái),服務(wù)器端開(kāi)發(fā)成本大大降低,同時(shí)因?yàn)榉?wù)器完全由第三方管理,實(shí)現(xiàn)了零運(yùn)維,運(yùn)維成本接近于零。
歷史上第一個(gè)Serverless平臺(tái)可以追溯到2006年,但一直沒(méi)有獲得廣泛的關(guān)注。2014年,隨著Docker和Kubernetes的興起,Serverless再度成為人們追逐的焦點(diǎn)。
2014年底,AWS Lambda發(fā)布,這是第一個(gè)成熟的Serverless服務(wù),是Serverless發(fā)展史上的里程碑,昭示著無(wú)服務(wù)器時(shí)代的到來(lái)。
之前,無(wú)論是中央主機(jī)、PC時(shí)代的物理機(jī)托管、云計(jì)算1.0時(shí)代的虛擬機(jī)托管、還是云計(jì)算2.0時(shí)代的容器技術(shù),應(yīng)用軟件開(kāi)發(fā)商都需要運(yùn)營(yíng)并管理“服務(wù)器”。
而進(jìn)入無(wú)服務(wù)器時(shí)代,很多應(yīng)用軟件開(kāi)發(fā)商不需要自己的服務(wù)器了,開(kāi)發(fā)和運(yùn)維復(fù)雜度大大降低,開(kāi)發(fā)模式和架構(gòu)模式也因此發(fā)生了巨大變化。
以AWS Lambda開(kāi)發(fā)為例,邏輯上只需要三個(gè)步驟,非常簡(jiǎn)潔。

AWS Lambda的推出,宣告了FaaS(Function as a Service,函數(shù)即服務(wù))的誕生,云服務(wù)形態(tài)也隨之演變成下面的形式。

小結(jié)
如果從應(yīng)用軟件服務(wù)端托管的視角來(lái)看待應(yīng)用軟件架構(gòu)和托管模型的演變歷史,可以發(fā)現(xiàn),實(shí)際上演變史可以分成四個(gè)階段:物理機(jī)、虛擬機(jī)、容器化和Serverless。
每個(gè)階段對(duì)“服務(wù)器”等資源的抽象程度不同,企業(yè)在不同階段對(duì)業(yè)務(wù)專(zhuān)注的程度也不同。
下圖從抽象程度和業(yè)務(wù)專(zhuān)注程度這兩個(gè)維度對(duì)比了四個(gè)階段,簡(jiǎn)要描述了每個(gè)階段的特點(diǎn)。

概覽應(yīng)用軟件架構(gòu)和服務(wù)托管的演變歷史,抽象程度越來(lái)越高、業(yè)務(wù)專(zhuān)注程度越來(lái)越高,是基本規(guī)律,從這點(diǎn)出發(fā),可以預(yù)見(jiàn),Serverless將會(huì)得到越來(lái)越廣泛的應(yīng)用。
所以接下來(lái),我們要來(lái)詳細(xì)了解一下Serverless。
Serverless詳解
Serverless的概念
CNCF(云原生計(jì)算基金會(huì))出品的《CNCF Serverless Whitepaperv1.0》,對(duì)Serverless computing做出了解釋?zhuān)?/p>
“Serverless computing refers to the concept of building and runningapplications that do not require server management. It describes afiner-grained deployment model where applications, bundled as one or morefunctions, are uploaded to a platform and then executed, scaled, and billed inresponse to the exact demand needed at the moment.”
翻譯成中文,意思是:
“無(wú)服務(wù)器計(jì)算指的是構(gòu)建和運(yùn)行不需要服務(wù)器管理的應(yīng)用程序的概念。它描述了一個(gè)細(xì)粒度的部署模型——應(yīng)用被打包成一個(gè)或多個(gè)函數(shù),上傳到一個(gè)平臺(tái)上,然后按需執(zhí)行,按需進(jìn)行規(guī)模縮放,同時(shí)應(yīng)用也按實(shí)際使用量向平臺(tái)付費(fèi)?!?/section>
在當(dāng)下語(yǔ)境中,Serverless,通常被稱(chēng)為“無(wú)服務(wù)器架構(gòu)”,指開(kāi)發(fā)者無(wú)須關(guān)心服務(wù)器,他們編寫(xiě)的代碼不會(huì)明確地部署在某些特定的硬件服務(wù)器、虛擬主機(jī)或容器中,而是托管到類(lèi)似AWS這樣的云計(jì)算廠(chǎng)商提供的云服務(wù)中,最終達(dá)到的效果是,開(kāi)發(fā)者無(wú)需配置及擴(kuò)展基礎(chǔ)設(shè)施,就可以運(yùn)行自己的服務(wù)。
“無(wú)服務(wù)器架構(gòu)”中的無(wú)服務(wù)器,并不是說(shuō)真的不需要服務(wù)器,實(shí)際上它仍然需要服務(wù)器及相關(guān)環(huán)境,只是這些東西由類(lèi)似亞馬遜這樣的云計(jì)算廠(chǎng)商提供,企業(yè)和開(kāi)發(fā)者不用關(guān)心。
從技術(shù)角度來(lái)說(shuō),Serverless就是FaaS和BaaS的結(jié)合,Serverless = FaaS + BaaS 。

FaaS,即Function as a Service,指云計(jì)算廠(chǎng)商提供的幫你運(yùn)行函數(shù)的平臺(tái),比如AWS Lambda、Microsoft Azure Functions、阿里云的函數(shù)計(jì)算、Google Cloud Functions等。
BaaS,即Backend as a Service,指一些后端云服務(wù),比如對(duì)象存儲(chǔ)、云數(shù)據(jù)庫(kù)、消息隊(duì)列等。有了BaaS,開(kāi)發(fā)者不再編寫(xiě)或管理所有服務(wù)端組件,可以使用云計(jì)算廠(chǎng)商提供的遠(yuǎn)程組件(而不是進(jìn)程內(nèi)的庫(kù))來(lái)提供服務(wù),能夠極大地簡(jiǎn)化應(yīng)用開(kāi)發(fā)難度。
傳統(tǒng)的互聯(lián)網(wǎng)應(yīng)用,往往是C/S或B/S架構(gòu):企業(yè)在后端的物理服務(wù)器(或虛擬主機(jī)或容器)上運(yùn)行一個(gè)超長(zhǎng)生命周期的服務(wù)進(jìn)程,處理應(yīng)用方方面面的邏輯,客戶(hù)端或?yàn)g覽器通過(guò)訪(fǎng)問(wèn)后端服務(wù)進(jìn)程來(lái)獲取相應(yīng)服務(wù)。
采用Serverless架構(gòu)后,原來(lái)后端服務(wù)進(jìn)程負(fù)責(zé)的業(yè)務(wù)邏輯,被移入客戶(hù)端,客戶(hù)端使用FaaS和BaaS來(lái)實(shí)現(xiàn)這些業(yè)務(wù)邏輯。
下圖展示了C/S架構(gòu)應(yīng)用與Serverless架構(gòu)應(yīng)用的關(guān)系,有助于我們理解什么是Serverless架構(gòu)。

圖片來(lái)自martinfowler.com
Serverless的歷史
在CNCF(云原生計(jì)算基金會(huì))出品的《CNCF Serverless Whitepaperv1.0》中,有一張圖,描述了Serverless的簡(jiǎn)短歷史。

2006年,Zimki平臺(tái)出現(xiàn),提供服務(wù)端JavaScript應(yīng)用。Zimki是第一個(gè)“按照實(shí)際調(diào)用付費(fèi)”的平臺(tái),它雖然沒(méi)有使用Serverless這個(gè)名詞,但實(shí)際上它是歷史上第一個(gè)Serverless平臺(tái)。
2012年,云基礎(chǔ)設(shè)施服務(wù)提供商Iron.io的副總裁Ken Fromm在《Why the future of software andapps is serverless》一文中提出,首次提到Serverless名詞及概念。Iron.io提供的Serverless產(chǎn)品是IronWorker,一個(gè)基于容器技術(shù)構(gòu)建的分布式平臺(tái),提供“work-on-demand”服務(wù)。
2014年底,亞馬遜發(fā)布AWS Lambda,把“Serverless”這一范式提高到了一個(gè)全新的層面。
AWS Lambda及其配套的各種BaaS,為云中運(yùn)行的應(yīng)用程序提供了一種全新的架構(gòu)模式:企業(yè)再也不用在服務(wù)器上持續(xù)運(yùn)行進(jìn)程以等待HTTP請(qǐng)求或API調(diào)用,只需要把自己開(kāi)發(fā)的函數(shù)(功能)上傳到AWS的某臺(tái)服務(wù)器上,就可以通過(guò)某種事件機(jī)制觸發(fā)代碼的執(zhí)行,按需完成特定的功能。
亞馬遜發(fā)布了AWS Lambda之后,Serverless這個(gè)概念開(kāi)始變得流行起來(lái),在很多場(chǎng)合反復(fù)出現(xiàn),國(guó)內(nèi)外的各大云廠(chǎng)商也都爭(zhēng)相跟進(jìn)。
2016年,IBM發(fā)布了IBM OpenWhiskon Bluemix,Google發(fā)布了GoogleCloud Functions,微軟發(fā)布了Azure Cloud Functions。
2017年,阿里云發(fā)布了函數(shù)計(jì)算Function Compute(函數(shù)計(jì)算FC),騰訊云發(fā)布了Serverless Clound Function(騰訊云函數(shù)SCF),華為發(fā)布了Huawei Function Stage。
隨著Serverless概念的持續(xù)發(fā)酵,2016年10月,第一屆Serverlessconf在倫敦舉辦,在兩天時(shí)間里,來(lái)自全世界40多位演講嘉賓為開(kāi)發(fā)者分享了關(guān)于這個(gè)領(lǐng)域進(jìn)展。
現(xiàn)在,業(yè)界普遍認(rèn)為,Serverless是云時(shí)代的全新計(jì)算范式,將引領(lǐng)云計(jì)算在下一個(gè)十年乘風(fēng)破浪。

Serverless的好處
Serverless帶來(lái)很多好處,典型的有以下10種。
(1)加速研發(fā),縮短產(chǎn)品上市時(shí)間
采用Serverless架構(gòu),企業(yè)無(wú)需自主研發(fā)后端服務(wù)程序,只需聚焦客戶(hù)側(cè),專(zhuān)注業(yè)務(wù)開(kāi)發(fā),整個(gè)研發(fā)工作量大幅降低,研發(fā)周期大大縮短,產(chǎn)品上市時(shí)間將大大縮短。
(2)無(wú)運(yùn)維
企業(yè)采用Serverless解決方案,服務(wù)器、數(shù)據(jù)庫(kù)和應(yīng)用程序等等方面的管理工作,由委托服務(wù)提供商維護(hù),無(wú)須企業(yè)自己維護(hù),運(yùn)維工作降低到接近于零。
(3)業(yè)務(wù)專(zhuān)注程度提升
采用Serverless,企業(yè)無(wú)須關(guān)心基礎(chǔ)設(shè)施管理和常見(jiàn)的后端服務(wù)(BaaS)研發(fā),能夠?qū)W⒃谧约荷瞄L(zhǎng)的業(yè)務(wù)上,為用戶(hù)提供更好的服務(wù)。
(4)彈性擴(kuò)展
Serverless架構(gòu)一個(gè)顯而易見(jiàn)的優(yōu)點(diǎn)是,“橫向擴(kuò)展是完全自動(dòng)的、有彈性的、且由服務(wù)提供者所管理”。所以企業(yè)只需要支付應(yīng)用需要的計(jì)算能力,就可以獲得由服務(wù)提供者保障的擴(kuò)展能力,既不用擔(dān)心自己的服務(wù)規(guī)模倍增時(shí)沒(méi)有資源可用,也不用擔(dān)心自己的服務(wù)收縮時(shí)導(dǎo)致資源浪費(fèi)。
(5)高可用性和容錯(cuò)性
在Serverless架構(gòu)模式下,云服務(wù)商提供的FaaS或BaaS服務(wù),經(jīng)過(guò)大量測(cè)試和實(shí)踐檢驗(yàn),自帶高可用性和容錯(cuò)性,企業(yè)使用Serverless,省去了自研相關(guān)服務(wù)所需的研發(fā)、測(cè)試、驗(yàn)證等等工作,直接可以獲得一套具備高可用性與容錯(cuò)性的服務(wù)。

(6)降低風(fēng)險(xiǎn)
對(duì)于組件越多越復(fù)雜的系統(tǒng),出故障的風(fēng)險(xiǎn)就越大。企業(yè)使用Serverless架構(gòu),通過(guò)FaaS或BaaS將后端組件外包出去,讓專(zhuān)業(yè)人員來(lái)處理可能的故障,往往比企業(yè)自己修復(fù)更可靠,修復(fù)時(shí)間也更短,可以有效提升企業(yè)的系統(tǒng)穩(wěn)定性,降低潛在的風(fēng)險(xiǎn)。
(7)降低開(kāi)發(fā)成本
企業(yè)采用Serverless架構(gòu),基于FaaS和BaaS構(gòu)建應(yīng)用程序,后端服務(wù)所需的各種應(yīng)用程序組件作為商品被采購(gòu),原本需要后端研發(fā)團(tuán)隊(duì)進(jìn)行的大量開(kāi)發(fā)工作,不再需要,開(kāi)發(fā)成本顯著降低。
(8)降低基礎(chǔ)設(shè)施成本
企業(yè)采用Serverless結(jié)構(gòu),無(wú)須購(gòu)買(mǎi)服務(wù)器、帶寬、存儲(chǔ)等基礎(chǔ)設(shè)置,節(jié)省了相關(guān)成本。
(9)降低運(yùn)維成本
使用Serverless,企業(yè)無(wú)需關(guān)心服務(wù)器,幾乎沒(méi)有運(yùn)維工作,運(yùn)維成本(含人員、運(yùn)營(yíng)、開(kāi)發(fā)等)大大降低。
(10)按需付費(fèi),降低經(jīng)營(yíng)成本
使用Serverless,企業(yè)只需要為每次函數(shù)的運(yùn)行付費(fèi),是真正的按實(shí)際使用量付費(fèi),函數(shù)不運(yùn)行,則不花錢(qián)。同時(shí),Serverless方案可以根據(jù)服務(wù)規(guī)模的變化自動(dòng)伸縮,企業(yè)無(wú)需為潛在的高峰服務(wù)預(yù)購(gòu)相關(guān)資源。整體來(lái)看,經(jīng)營(yíng)成本會(huì)顯著下降。

Serverless在現(xiàn)階段的問(wèn)題
Serverless目前正在快速發(fā)展之中,在現(xiàn)階段,也存在一些問(wèn)題。
(1)無(wú)狀態(tài)。
Serverless要實(shí)現(xiàn)自由的縮放,無(wú)狀態(tài)是必須的。
在無(wú)狀態(tài)這個(gè)背景下,每次函數(shù)執(zhí)行,使用的都可能是不同的容器,函數(shù)之間無(wú)法進(jìn)行內(nèi)存或數(shù)據(jù)共享。
而很多企業(yè)的業(yè)務(wù)服務(wù)是有狀態(tài)的,采用Serverless架構(gòu),就需要通過(guò)類(lèi)似Redis這樣的存儲(chǔ)服務(wù),以共享數(shù)據(jù)的方式來(lái)實(shí)現(xiàn)狀態(tài)的存儲(chǔ)和傳遞。而與存儲(chǔ)交互就不可避免的增加了延遲和復(fù)雜性。
(2)本地測(cè)試?yán)щy。
借助類(lèi)似SAM這樣的工具,AWS Lambda和MicrosoftAzure已經(jīng)可以本地運(yùn)行FaaS功能,程序調(diào)試相比2018年之前,已經(jīng)方便了不少。但Serverless應(yīng)用的本地測(cè)試仍然是一個(gè)很棘手的問(wèn)題。
雖然可以在測(cè)試環(huán)境下使用各種數(shù)據(jù)庫(kù)和消息隊(duì)列來(lái)模擬生產(chǎn)環(huán)境,但是對(duì)于無(wú)服務(wù)應(yīng)用的集成或者端到端測(cè)試尤其困難,很難在本地模擬應(yīng)用程序的各種連接,并與性能和縮放的特性結(jié)合起來(lái)測(cè)試,并且Serverless應(yīng)用本身也是分布式的,簡(jiǎn)單的將無(wú)數(shù)的FaaS和BaaS組件粘合起來(lái)也是有挑戰(zhàn)性的。
(3)冷啟動(dòng)時(shí)間可能帶來(lái)性能問(wèn)題。
Serverless在收到事件(請(qǐng)求)時(shí)才會(huì)運(yùn)行特定的函數(shù)(功能)。
這意味著,當(dāng)某個(gè)函數(shù)在一段時(shí)間內(nèi)沒(méi)有被請(qǐng)求時(shí),它的所有實(shí)例都可能被運(yùn)行時(shí)移除,這種情況下,對(duì)該函數(shù)的下一次請(qǐng)求來(lái)臨時(shí),運(yùn)行時(shí)就需要下載函數(shù)代碼、啟動(dòng)一個(gè)容器、在容器里面再啟動(dòng)一個(gè)運(yùn)行環(huán)境,最后再來(lái)執(zhí)行函數(shù)代碼。這樣就會(huì)有相對(duì)較長(zhǎng)的冷啟動(dòng)時(shí)間。
如果企業(yè)的應(yīng)用需要特別短的響應(yīng)時(shí)間,這個(gè)冷啟動(dòng)時(shí)間就可能是一個(gè)性能瓶頸。
(4)沒(méi)有統(tǒng)一標(biāo)準(zhǔn),容易出現(xiàn)廠(chǎng)商鎖定現(xiàn)象。
Serverless還是新興技術(shù),處于快速發(fā)展階段,缺少統(tǒng)一的標(biāo)準(zhǔn)。
在不同的無(wú)服務(wù)計(jì)算服務(wù)商之間,不僅僅是函數(shù)的調(diào)用語(yǔ)義和打包方式不同,許多無(wú)服務(wù)應(yīng)用也依賴(lài)于其生態(tài)系統(tǒng)的專(zhuān)有 BaaS 服務(wù)(例如對(duì)象存儲(chǔ)、鍵值數(shù)據(jù)庫(kù)、身份驗(yàn)證、日志監(jiān)控等)。
某一服務(wù)商的用戶(hù),往往需要針對(duì)該服務(wù)商的API編程,容易被該廠(chǎng)商鎖定。

(5)無(wú)服務(wù)器計(jì)算可能存在成本不可預(yù)測(cè)的情況。
對(duì)于一些用戶(hù)來(lái)說(shuō),無(wú)服務(wù)計(jì)算采用即付即用的計(jì)費(fèi)模型的一個(gè)缺點(diǎn)是成本不可預(yù)測(cè)。這與許多組織管理預(yù)算的方式不太一致,當(dāng)公司想要知道下一年無(wú)服務(wù)計(jì)算的成本預(yù)算是多少,并來(lái)批準(zhǔn)預(yù)算時(shí)就不太好制定預(yù)算。
這種需求是合理的,云服務(wù)商可能會(huì)通過(guò)提供基于 bucket 的定價(jià)方式來(lái)緩解這個(gè)問(wèn)題,類(lèi)似于電話(huà)公司為特定使用量提供固定費(fèi)率計(jì)費(fèi)方式一樣。
我們還相信,隨著越來(lái)越多的組織使用無(wú)服務(wù)計(jì)算,他們將能夠基于歷史來(lái)預(yù)測(cè)他們的成本,就像當(dāng)今公共事業(yè)服務(wù)(如電力)所使用的辦法。
(6)運(yùn)行時(shí)間的限制
當(dāng)前各云平臺(tái)對(duì)于FaaS的運(yùn)行時(shí)間都有10-15分鐘的限制,這種限制影響了許多場(chǎng)景的實(shí)現(xiàn),尤其是一些強(qiáng)狀態(tài)依賴(lài)的場(chǎng)景,例如長(zhǎng)時(shí)間保持?jǐn)?shù)據(jù)庫(kù)連接的情況等。
(7)多租戶(hù)問(wèn)題
多租戶(hù)是指幾個(gè)不同客戶(hù)(或租戶(hù))的多個(gè)軟件實(shí)例在同一臺(tái)計(jì)算機(jī)上運(yùn)行,并且可能在同一托管應(yīng)用程序中運(yùn)行。這會(huì)帶來(lái)安全性(一個(gè)客戶(hù)可以查看另一人的數(shù)據(jù))、健壯性(一個(gè)客戶(hù)的軟件錯(cuò)誤導(dǎo)致另一個(gè)客戶(hù)的軟件失?。┖托阅埽ǜ哓?fù)載的客戶(hù)導(dǎo)致另一個(gè)客戶(hù)放慢速度)等各方面的問(wèn)題。
目前,AWS Lambda已經(jīng)足夠成熟,沒(méi)有此類(lèi)問(wèn)題。但對(duì)于不那么成熟的服務(wù)平臺(tái),應(yīng)該注意這些問(wèn)題。
以上是Serverless在現(xiàn)階段存在的一些問(wèn)題,會(huì)在一定程度上影響服務(wù)體驗(yàn),但這些都是暫時(shí)的,相信隨著Serverless實(shí)踐的不斷深入和Serverless生態(tài)的持續(xù)進(jìn)化,它們很快就會(huì)得到改善或解決。

Serverless的典型適用場(chǎng)景
使用Serverless,企業(yè)幾乎可以為任何類(lèi)型的應(yīng)用程序或后端服務(wù)運(yùn)行代碼。下面是一些典型的應(yīng)用場(chǎng)景說(shuō)明。
(1)Web應(yīng)用
在Web應(yīng)用中,可以整合API網(wǎng)關(guān)和Serverles服務(wù)構(gòu)建Web后端,幫助開(kāi)發(fā)者構(gòu)建可彈性擴(kuò)展、高可用的Web后端應(yīng)用服務(wù)。
(2)移動(dòng)應(yīng)用后端
使用Serverless作為移動(dòng)應(yīng)用(包括小程序)的后端非常有吸引力,這種方案使得開(kāi)發(fā)者可以通過(guò)REST API訪(fǎng)問(wèn)BaaS來(lái)實(shí)現(xiàn)后端功能,而他們可以專(zhuān)注在移動(dòng)業(yè)務(wù)上。典型的應(yīng)用包括音視頻處理、圖形優(yōu)化、批量通知、離線(xiàn)異步任務(wù)、認(rèn)證、人臉識(shí)別等。
(3)IoT場(chǎng)景
在IoT場(chǎng)景下,可高效的處理實(shí)時(shí)流數(shù)據(jù),由設(shè)備產(chǎn)生海量的實(shí)時(shí)信息流數(shù)據(jù),通過(guò)Serverless服務(wù)分類(lèi)處理并寫(xiě)入后端處理。
(4)機(jī)器學(xué)習(xí)及AI模型處理
當(dāng)前其實(shí)在云端已經(jīng)提供了應(yīng)用層面的Serverless機(jī)器學(xué)習(xí)服務(wù),例如AWS的Sagemaker服務(wù),用戶(hù)只要輸入數(shù)據(jù),設(shè)置好模型,Sagemaker就會(huì)幫忙做訓(xùn)練,并按照模型的訓(xùn)練時(shí)間來(lái)計(jì)費(fèi)。
Berkeley的研究人員也開(kāi)發(fā)了一個(gè)基于Serverless的更為通用的機(jī)器學(xué)習(xí)庫(kù)Cirrus。
另外,企業(yè)也可以使用類(lèi)似AWS Lambda這樣的服務(wù),對(duì)即將輸入到機(jī)器學(xué)習(xí)模型的數(shù)據(jù)做預(yù)處理。
關(guān)于如何將Serverless和機(jī)器學(xué)習(xí)結(jié)合起來(lái),目前有很多研究者正在進(jìn)行各式各樣的探索。

(5)工作流(業(yè)務(wù)邏輯)
有一些業(yè)務(wù)邏輯由一系列的步驟組成,比如訂單請(qǐng)求和批準(zhǔn)、庫(kù)存交易處理等,這些步驟和環(huán)節(jié)可以采用Serverless架構(gòu)實(shí)現(xiàn),在客戶(hù)端事件和有狀態(tài)管理器的協(xié)作下,整個(gè)業(yè)務(wù)邏輯都可以很好的實(shí)現(xiàn)。股票交易系統(tǒng),就是一個(gè)典型的例子。
Amazon提供了AWS Step Functions,專(zhuān)門(mén)用來(lái)支持快速工作流,算是相當(dāng)友好了。
(6)多媒體處理
在實(shí)時(shí)多媒體場(chǎng)景下,用戶(hù)將圖像、音視頻等上傳到對(duì)象存儲(chǔ)中,可以通過(guò)上傳事件觸發(fā)多個(gè)函數(shù),分別完成圖像處理、高清轉(zhuǎn)碼、音頻轉(zhuǎn)碼等功能,滿(mǎn)足用戶(hù)對(duì)實(shí)時(shí)性和并發(fā)能力的高要求。
(7)持續(xù)集成
在傳統(tǒng)的持續(xù)集成系統(tǒng)中,構(gòu)建工作往往是在新代碼提交或Pull Request觸發(fā)后執(zhí)行,但卻通常需要配置一系列構(gòu)建主機(jī)隨時(shí)待命,這就帶來(lái)資源浪費(fèi),采用Serverless,可以消除預(yù)配置主機(jī),降低成本。
(8)數(shù)據(jù)處理
企業(yè)可以使用類(lèi)似AWS Lambda這樣的FaaS服務(wù)來(lái)執(zhí)行代碼以響應(yīng)數(shù)據(jù)更改、系統(tǒng)狀態(tài)變化或用戶(hù)操作等觸發(fā)器,并借此構(gòu)建各種實(shí)時(shí)的無(wú)服務(wù)器數(shù)據(jù)處理系統(tǒng)。
(9)事件驅(qū)動(dòng)的各種場(chǎng)景
無(wú)服務(wù)器計(jì)算適合于任何事件驅(qū)動(dòng)的各種不同的用例,這包括物聯(lián)網(wǎng)、移動(dòng)應(yīng)用、基于網(wǎng)絡(luò)的應(yīng)用程序、聊天機(jī)器人、實(shí)時(shí)翻譯、數(shù)據(jù)更改審計(jì)、定時(shí)任務(wù)、批處理任務(wù)、機(jī)器學(xué)習(xí)及AI模型處理等。

Serverless現(xiàn)在的商業(yè)成熟度如何?
從2014年AWS Lambda發(fā)布到現(xiàn)在,時(shí)間過(guò)去了7年,Serverless已經(jīng)走過(guò)了最初的新興階段,種種跡象表明,Serverless的成熟度已經(jīng)非常之高。
首先,提供Serverless服務(wù)的云供應(yīng)商越來(lái)越多,Amazon、Google、Microsoft、IBM、Alibaba、Tencent、Cloudflare、Huawei、Oracle等9大供應(yīng)商,都有了自己的成熟產(chǎn)品。
其次,開(kāi)發(fā)工具和框架已經(jīng)相對(duì)完整、完善。
比如Serverless興起的前兩年,F(xiàn)aaS相關(guān)的開(kāi)發(fā),還不支持本地運(yùn)行,現(xiàn)在普遍都支持了。
比如,前幾年工具匱乏,現(xiàn)在云服務(wù)商自己就提供了從Web IDE到命令行工具到既有IDE插件到監(jiān)控等多種形式的工具,比如AWS,就提供了AWS Cloud9、AWSCodePipeline、AWS Config、AWSLambda Power Tuning、AWS X-Ray、AWSCloudFormation、AWS Toolkit for JetBrains、Amazon CloudWatch、AWS Serverless ApplicationRepository等各種形式各種用途的工具.
另外,還有很多第三方工具,如Serverless、Thundra、Datadog、Amplify、Architect、Claudia.js等。
然后,Serverless已經(jīng)能夠支持市面上的各種主流開(kāi)發(fā)語(yǔ)言和框架,包括Python、JavaScript、Java、Golang、C#、Ruby、F#、TypeScript、PHP、Node.js、C++、Visual Basic等。
最重要的是,經(jīng)過(guò)幾年的發(fā)展,已經(jīng)有數(shù)量眾多的來(lái)自各行各業(yè)的企業(yè),采用了Serverless架構(gòu)。
O’REILLY在2019年11月份發(fā)布了一份Serverless使用情況的調(diào)研報(bào)告,關(guān)于采用Serverless的行業(yè)數(shù)據(jù)分析如下圖所示。

可以看到,像軟件、金融、銀行、咨詢(xún)和專(zhuān)業(yè)服務(wù)、計(jì)算機(jī)、電子、通信、醫(yī)療、教育、政府、媒體與娛樂(lè)、制造等等行業(yè)都有在用Serverless。
同時(shí),這份調(diào)研報(bào)告也指出,只有三分之一的受訪(fǎng)者在規(guī)模小于100人的公司工作,其中企業(yè)規(guī)模大于10000人的受訪(fǎng)者占據(jù)了差不多五分之一的份額。這在一定程度上表明,2019年關(guān)注Serverless的不僅是沒(méi)有技術(shù)債務(wù)或管理費(fèi)用的初創(chuàng)公司,大型企業(yè)也很重視Serverless。

2020年2月份,Datadog發(fā)布的一份關(guān)于Serverless的報(bào)告,再次驗(yàn)證了這個(gè)趨勢(shì)。
Datadog的報(bào)告指出,使用Amazon Web Services的 Datadog 客戶(hù)中有近一半已經(jīng)采用了 Lambda。

同時(shí),令人意外的是,AWS Lambda 的廣泛采用并不是由更新、更小的公司所驅(qū)動(dòng)的。相反,在基礎(chǔ)設(shè)施規(guī)模最大的那些公司中,超過(guò)四分之三的公司都采用了AWS Lambda。

從Amazon官網(wǎng)上,也可以看到很多來(lái)自較大規(guī)模公司的案例,比如齊心集團(tuán)、可口可樂(lè)、景泰科技、iRobot、湯森路透、Benchling、Financial Engines、Square Enix、Localytics、華夏航空、涂鴉智能、FINRA等。
這些案例覆蓋的行業(yè)和領(lǐng)域也相當(dāng)廣泛,包括人工智能、物聯(lián)網(wǎng)、航空、醫(yī)療、快消、工業(yè)自動(dòng)化、金融、咨詢(xún)、游戲、辦公用品、非營(yíng)利組織等。這也印證了O’REILLY和Datadog報(bào)告的有效性。
不僅有很多客戶(hù)采用了云服務(wù)商的Serverless方案,云服務(wù)商本身,自己也有非常深入的實(shí)踐。
比如阿里云推出了函數(shù)計(jì)算FC,淘寶、支付寶、釘釘?shù)劝⒗锵档墓?,都已?jīng)將函數(shù)計(jì)算應(yīng)用于生產(chǎn)業(yè)務(wù)。
比如Amazon推出了基于AWS Lambda的無(wú)服務(wù)器計(jì)算方案,亞馬遜電商也進(jìn)行了廣泛深入的實(shí)踐。
在reInvent 2021大會(huì),亞馬遜創(chuàng)始人兼CEO Andy Jassy提到,亞馬遜電商一半的新應(yīng)用都已經(jīng)跑在AWS Lambda上,Lambda現(xiàn)在每月會(huì)處理上萬(wàn)億次調(diào)用,換成每秒的話(huà),已經(jīng)在百萬(wàn)每秒的數(shù)量級(jí),這已經(jīng)相當(dāng)于天貓雙十一的量級(jí)。
這是非常有說(shuō)服力的實(shí)踐和數(shù)據(jù)。
綜合以上這些情況,我們可以看到,Serverless的生態(tài)和商業(yè)成熟度,都已經(jīng)達(dá)到了就緒狀態(tài),可以支持企業(yè)完成各種商業(yè)化服務(wù)的開(kāi)發(fā)了。

什么樣的客戶(hù)選擇Serverless會(huì)更好?
《CNCF Serverless Whitepaper v1.0》指出,當(dāng)一個(gè)業(yè)務(wù)系統(tǒng)的負(fù)載符合以下條件時(shí),應(yīng)該優(yōu)先選擇Serverless架構(gòu):
異步,并發(fā),組件可獨(dú)立部署和擴(kuò)展
服務(wù)使用量可能很大,但可能是偶發(fā)的,不可預(yù)測(cè)
短暫、無(wú)狀態(tài)的應(yīng)用,對(duì)冷啟動(dòng)時(shí)間不敏感
業(yè)務(wù)具有很強(qiáng)的動(dòng)態(tài)屬性,發(fā)展變化很快,需要快速開(kāi)發(fā)迭代
近幾年,各個(gè)行業(yè)已經(jīng)在這些原則的指引下進(jìn)行了很多的Serverless實(shí)踐??偨Y(jié)來(lái)看,如下三類(lèi)客戶(hù)很適合選擇Serverless:
服務(wù)規(guī)模很大或有明顯的波峰波谷,比如軟件、金融、教育、醫(yī)療、制造等領(lǐng)域的企業(yè),有一些業(yè)務(wù)可能負(fù)載很高,適合通過(guò) Serverless 技術(shù)來(lái)支撐;
業(yè)務(wù)動(dòng)態(tài)屬性很強(qiáng),比如IoT、游戲、在線(xiàn)教育、實(shí)時(shí)多媒體資訊、移動(dòng)互聯(lián)網(wǎng)等領(lǐng)域的企業(yè),消費(fèi)者會(huì)通過(guò)數(shù)字觸點(diǎn)或者物理觸點(diǎn),頻繁與企業(yè)的產(chǎn)品和服務(wù)交互,很考驗(yàn)平臺(tái)的動(dòng)態(tài)支撐能力,適合使用 Serverless 技術(shù);
想要低成本啟動(dòng)新業(yè)務(wù)并為未來(lái)發(fā)展保留彈性擴(kuò)展的可能,不管是中小企業(yè)還是大型企業(yè),都可以采用Serverless技術(shù)。

Serverless常見(jiàn)服務(wù)商
目前提供Serverless服務(wù)的云供應(yīng)商很多,比如Amazon、Microsoft、IBM、Google、Alibaba、Tencent、Cloudflare、Huawei等,但能在國(guó)內(nèi)提供良好服務(wù)并且處于市場(chǎng)前列的,只有Amazon、Microsoft、Alibaba和Tencent。
接下來(lái)我們就這四家服務(wù)商做一些介紹,并對(duì)比他們的解決方案。
四大服務(wù)商簡(jiǎn)介
(1)Amazon
我們?cè)诮榻BServerless歷史時(shí)已經(jīng)提到,Amazon Web Services(AWS)在2014年推出了AWS Lambda產(chǎn)品,把FaaS帶入市場(chǎng)。
自發(fā)布以來(lái),AWS Lambda已經(jīng)成了無(wú)服務(wù)器架構(gòu)的代名詞。憑借著最廣泛的服務(wù)類(lèi)別,AWS Lambda一直保持著市場(chǎng)領(lǐng)先地位,它最著名的案例,莫過(guò)于Netflix的無(wú)服務(wù)器公有云應(yīng)用。在國(guó)內(nèi),齊心集團(tuán)、涂鴉智能、華夏航空等,是AWS的典型案例。
(2)Microsoft
2016年,Microsoft推出了MicrosoftAzure Cloud Functions,是AWS Lambda的重要競(jìng)爭(zhēng)對(duì)手。Microsoft Azure Cloud Functions提供了一組與Amazon類(lèi)似的服務(wù),它更關(guān)注于Microsoft體系產(chǎn)品的語(yǔ)言和工具。Azure Functions 的一個(gè)案例是Have I Been Pwned。
(3)阿里巴巴(Alibaba)
2017年4月,阿里云發(fā)布了FaaS產(chǎn)品——函數(shù)計(jì)算Function Compute(FC),后續(xù)基于阿里云生態(tài),不斷完善功能。目前,阿里系的淘寶、支付寶、釘釘?shù)纫呀?jīng)將Serverless應(yīng)用于生產(chǎn)業(yè)務(wù)。新浪微博、世紀(jì)聯(lián)華是阿里云函數(shù)計(jì)算FC的典型客戶(hù)。
(4)騰訊(Tencent)
2017年4月,Tencent發(fā)布了FaaS類(lèi)型的產(chǎn)品——Serverless Cloud Function(騰訊云函數(shù),SCF)。騰訊云函數(shù)與騰訊云生態(tài)整合,形成了自己的解決方案。騰訊云將全球流行的ServerlessFramework平臺(tái)引入中國(guó),還將ServerlessDays社區(qū)大會(huì)引入中國(guó),推動(dòng)了中國(guó)的Serverless技術(shù)發(fā)展。芒果TV、蘑菇街等是騰訊云函數(shù)的典型客戶(hù)。

服務(wù)商對(duì)比
總的說(shuō)來(lái),上面提到的各大服務(wù)商都能夠提供相似的服務(wù),也都能夠在托管式架構(gòu)上運(yùn)行各種應(yīng)用,可以給用戶(hù)帶來(lái)Serverless的各種優(yōu)勢(shì)。
為了幫助你找出最適合自己的供應(yīng)商,接下來(lái)我將從五個(gè)方面深入比較它們的服務(wù):
方案完整性
支持的編程語(yǔ)言
工具支持
開(kāi)源生態(tài)
第三方評(píng)價(jià)
1)方案完整性
AWS Lambda或者Alibaba函數(shù)計(jì)算FC這樣的FaaS服務(wù),僅僅是Serverless的一部分,單靠它們,難以構(gòu)建真實(shí)的、復(fù)雜的業(yè)務(wù)。所以,各家云服務(wù)商,往往還會(huì)結(jié)合自己的云生態(tài),提供各種BaaS,與FaaS集成,形成對(duì)客戶(hù)更有價(jià)值的解決方案。
Amazon的方案如下圖所示:

Microsoft Azure Functions的方案集如下圖所示:

Microsoft的方案集,更像是應(yīng)用場(chǎng)景的羅列,我根據(jù)網(wǎng)站上的信息,未能找到它所說(shuō)的“一系列云服務(wù)”的列表。
Alibaba的Serverless產(chǎn)品家族如下圖所示:

Tencent的Serverless產(chǎn)品家族:

綜合四家云服務(wù)商官網(wǎng)上對(duì)自己Serverless產(chǎn)品的介紹,對(duì)比之后可以發(fā)現(xiàn),Amazon的方案完整性最高,遠(yuǎn)超其它幾家。
這跟Amazon在云服務(wù)領(lǐng)域的戰(zhàn)略有很強(qiáng)的相關(guān)性——Amazon在IaaS領(lǐng)域和Serverless方面,推出商業(yè)化產(chǎn)品的時(shí)間,都比其它廠(chǎng)商領(lǐng)先兩年,這使得它在產(chǎn)品研發(fā)、市場(chǎng)驗(yàn)證、客戶(hù)積累、服務(wù)體系搭建等方面贏得了優(yōu)勢(shì)。
2)支持的編程語(yǔ)言
為了讓用戶(hù)可以在托管的環(huán)境中運(yùn)行自己的應(yīng)用,Serverless提供商往往會(huì)在它們所提供的公有云環(huán)境里支持多種編程語(yǔ)言。
Amazon:Python、C#、F#、Node.js、VisualBasic、Golang、Java、Ruby、PHP、PowerShell、Rust、C++、Custom Runtime;
Microsoft:Python、C#、F#、Node.js、PHP、Java、Bash、Batch、PowerShell、Java、JavaScript、TypeScript、Golang、Rust;
Alibaba:Python、Node.js、Golang、Java、PHP、C#、F#、PowerShell、PHP、C++、Ruby、Lua、Dart、TypeScript、Custom Runtime;
Tencent:Python、Node.js、Golang、Java、PHP、Custom Runtime;
四家供應(yīng)商都支持了常見(jiàn)的主流編程語(yǔ)言,相互之間沒(méi)有太大差別。
另外,Amazon、Alibaba、Tencent都支持定制運(yùn)行時(shí)(Custom Runtime),客戶(hù)可以根據(jù)自己的需求來(lái)支持慣用的編程語(yǔ)言。(我在Microsoft的官網(wǎng)上沒(méi)有查到Azure Functions對(duì)Custom Runtime的支持。)
3)工具支持
為了方便用戶(hù)開(kāi)發(fā)、調(diào)試、部署、監(jiān)控基于Serverless架構(gòu)的應(yīng)用,各家服務(wù)商必須要提供針對(duì)Serverless的各種工具。
Amazon:AWS CLI、AWS Cloud9、AWS CodePipeline、AWS Config、AWS Lambda Power Tuning、AWS X-Ray、AWS CloudFormation、AWS Toolkit for JetBrains、Amazon CloudWatch、AWS Serverless ApplicationRepository、Amazon Inspector、AWSWAF、AWS CloudTrail、AWS SSO、Amazon GuardDuty、AWS Shield、Amazon Cognito、AWS SAM。
Microsoft:VS Code、VisualStudio、Azure CLI、Azure Devops、Azure Functions Core Tools、Azure Jenkins插件、Github。
Alibaba:Funcraft、fcli、Serverless Devs Tool、Aliyun Serverless VSCode插件、Midway Serverless。
Tencent:Serverless Web IDE、Serverless Framework CLI(命令行工具)、SCF VSCode插件、ASW 工作流、CloudBase。
目前各家云服務(wù)商給出的工具鏈,結(jié)合開(kāi)源工具,可以滿(mǎn)足基本的Serverless應(yīng)用開(kāi)發(fā)與部署。
相比之下, Amazon的工具鏈最為完整、豐富,涵蓋開(kāi)發(fā)、部署、監(jiān)控、遷移、安全控制與管理等各個(gè)維度。

4)開(kāi)源生態(tài)
下面是一些常見(jiàn)的與Serverless相關(guān)的開(kāi)源項(xiàng)目及工具,我搜集了它們和四家云服務(wù)商的融合關(guān)系。
Serverless Framework:Amazon AWS、Microsoft Azure、Google Cloud、Knative、Tencent Clound。
Midway:Amazon AWS、AlibabaCloud、Tencent Cloud
Serverless Devs:Amazon AWS、Alibaba Cloud、Tencent Cloud
Datadog:Amazon AWS、MicrosoftAzure
Triggermesh:Amazon、Google、Oracle
Claudia.js:Amazon
Zappa:Amazon
Amplify-CLI:Amazon
Knative:Amazon(AWS Lambda可以用Triggermesh移植到Knative)
Architect:Amazon AWS Lambda
LambCI:Amazon AWS Lambda
Thundra:Amazon AWS Lambda
從這些開(kāi)源項(xiàng)目對(duì)云廠(chǎng)商的支持情況看,Amazon與開(kāi)源生態(tài)融合程度更高一些。
在GitHub上以“Serverless”為關(guān)鍵字進(jìn)行檢索,結(jié)果也是如此,排在前面的大部分開(kāi)源項(xiàng)目,都和AWSLambda相關(guān)。
5)第三方評(píng)價(jià)
Forrester是全球最權(quán)威的IT咨詢(xún)?cè)u(píng)測(cè)機(jī)構(gòu)之一,它的The Forrester Wave是業(yè)界公認(rèn)最嚴(yán)苛的廠(chǎng)商綜合能力評(píng)估模型之一,F(xiàn)orresterWave報(bào)告在全球范圍內(nèi)受到高度認(rèn)可。
2020年3月份,F(xiàn)orrester發(fā)布了《The Forrester New Wave?: Function-As-A-Service Platforms, Q1 2020》。

在這次的報(bào)告中,Amazon和Microsoft處于領(lǐng)導(dǎo)者象限,其中Amazon在市場(chǎng)表現(xiàn)上遙遙領(lǐng)先。騰訊(Tencent)和阿里巴巴(Alibaba)處于強(qiáng)勁表現(xiàn)者象限。
2021年3月,F(xiàn)orrester發(fā)布了《The Forrester Wave?: Function-As-A-Service Platforms, Q1 2021》。

在這次的報(bào)告中,Amazon、Microsoft、阿里巴巴(Alibaba)處于領(lǐng)導(dǎo)者象限。其中,Alibaba首次獲得領(lǐng)導(dǎo)者評(píng)價(jià),Amazon一直是領(lǐng)導(dǎo)者,并且市場(chǎng)表現(xiàn)再次依然遙遙領(lǐng)先。騰訊(Tencent)處于強(qiáng)勁表現(xiàn)者象限。
通過(guò)方案完整性、支持的編程語(yǔ)言、工具支持、開(kāi)源生態(tài)、第三方評(píng)價(jià)這五個(gè)方面的對(duì)比,可以發(fā)現(xiàn),四大主流Serverless提供商,都能提供準(zhǔn)備就緒的商業(yè)服務(wù)。
相較之下,Amazon在方案完整性、工具支持、開(kāi)源生態(tài)融合性和第三方評(píng)價(jià)這幾方面,具有更好的表現(xiàn),遙遙領(lǐng)先其他幾家云供應(yīng)商。
Serverless的未來(lái)發(fā)展
了解了Serverless的歷史、現(xiàn)狀及供應(yīng)商的情況,讓我們?cè)賮?lái)看一下Serverless在未來(lái)幾年的可能發(fā)展方向。
減少缺陷
Serverless仍然處于快速發(fā)展階段,將來(lái)Serverless的一個(gè)重要發(fā)展,就是減輕設(shè)計(jì)上的固有缺陷并消除或改善實(shí)現(xiàn)層面的缺陷。
統(tǒng)一標(biāo)準(zhǔn)
現(xiàn)在的Serverless,各個(gè)廠(chǎng)商都有自己的實(shí)現(xiàn),函數(shù)調(diào)用語(yǔ)義、打包方式、事件源、支持的編程語(yǔ)言等等都不相同,同時(shí)各廠(chǎng)商的無(wú)服務(wù)應(yīng)用也依賴(lài)于其生態(tài)系統(tǒng)的專(zhuān)有 BaaS 服務(wù),這就導(dǎo)致業(yè)界沒(méi)有統(tǒng)一的標(biāo)準(zhǔn)。
目前已經(jīng)有CloudEvents這樣的開(kāi)源項(xiàng)目,用于制作統(tǒng)一的事件格式,提升不同平臺(tái)之間的服務(wù)互操作能力。未來(lái)還會(huì)有更多類(lèi)似的開(kāi)源或開(kāi)放項(xiàng)目,促進(jìn)Serverless平臺(tái)的標(biāo)準(zhǔn)化,最后會(huì)形成業(yè)界的統(tǒng)一標(biāo)準(zhǔn)。
強(qiáng)大的開(kāi)發(fā)框架
目前基于Serverless開(kāi)發(fā)大型項(xiàng)目還比較復(fù)雜,未來(lái)如果能出現(xiàn)一些強(qiáng)大的開(kāi)發(fā)框架,企業(yè)基于這類(lèi)框架,方便開(kāi)發(fā)大型項(xiàng)目,對(duì)Serverless的深入發(fā)展會(huì)非常有幫助。
目前Midway Serverless、Serverless Framework等框架,已經(jīng)在做類(lèi)似的事情,但都還處在基礎(chǔ)發(fā)展階段,未來(lái)會(huì)有具備更復(fù)雜功能的、更完善的、更強(qiáng)大的框架出現(xiàn)。

供應(yīng)商實(shí)現(xiàn)的抽象與隔離
前面我在介紹Serverless的不足時(shí),提到過(guò)“廠(chǎng)商鎖定”問(wèn)題。
未來(lái)可能會(huì)出現(xiàn)一些開(kāi)發(fā)框架或者抽象層級(jí)更高的編程語(yǔ)言,能夠兼容各大云平臺(tái),對(duì)云供應(yīng)商的實(shí)現(xiàn)進(jìn)行抽象和隔離。比如說(shuō),開(kāi)發(fā)者要使用FaaS,不用針對(duì)AWS Lambda或AzureFunctions編程,只要基于某種新的編程語(yǔ)言編寫(xiě)代碼,就可以根據(jù)需要,編譯成適合AWS Lambda或者Azure Functions的執(zhí)行碼,上傳到AWS Lambda或者Azure Functions去運(yùn)行,這樣就實(shí)現(xiàn)了一次編寫(xiě)、到處運(yùn)行的目的,能夠大大提升開(kāi)發(fā)效率,同時(shí)也解決了廠(chǎng)商鎖定問(wèn)題。
目前Knative、OpenFaaS、OpenWhisk等開(kāi)源Serverless項(xiàng)目,正在做相關(guān)的事情,但還在初級(jí)階段。
新的BaaS存儲(chǔ)服務(wù)可能會(huì)出現(xiàn)
現(xiàn)有的云存儲(chǔ)服務(wù)在訪(fǎng)問(wèn)延遲和IOPS上都有明顯的局限,未來(lái)可能會(huì)有新的 BaaS 存儲(chǔ)服務(wù)出現(xiàn),它們的性能與本地塊存儲(chǔ)相當(dāng),并且具有臨時(shí)性和持久性存儲(chǔ)的特性,能幫助無(wú)服務(wù)器計(jì)算擴(kuò)展更多的應(yīng)用類(lèi)型。
對(duì)復(fù)雜的有狀態(tài)的業(yè)務(wù)提供更好的支持
Serverless的無(wú)狀態(tài),限制了很多有狀態(tài)業(yè)務(wù)采用Serverless架構(gòu),同時(shí)也限制了基于Serverless構(gòu)建復(fù)雜的應(yīng)用。將來(lái)的Serverless解決方案,在新的存儲(chǔ)服務(wù)的協(xié)作下,可能會(huì)對(duì)“狀態(tài)”有更好的策略,能支撐更多復(fù)雜業(yè)務(wù)。
最后,援引《A Berkeley View on Serverless Computing》一文的預(yù)測(cè)作為本文的結(jié)尾:無(wú)服務(wù)計(jì)算將成為云時(shí)代的默認(rèn)計(jì)算范式,在很大程度上取代Serverful 計(jì)算,從而結(jié)束客戶(hù)機(jī)-服務(wù)器時(shí)代。


關(guān)注“安曉輝生涯”,遇見(jiàn)更好的自己
往
期
回
顧

歡迎添加安曉輝老師微信a32352937
一對(duì)一咨詢(xún)識(shí)別上圖二維碼
文字咨詢(xún)請(qǐng)戳閱讀原文
