前言 Serverless(無(wú)服務(wù)器)架構(gòu)的提出與云計(jì)算密不可分。由于其優(yōu)點(diǎn)突出,故而發(fā)展極為迅猛。今天,我們就邀請(qǐng)亞馬遜AWS首席云計(jì)算技術(shù)顧問(wèn)費(fèi)良宏老師,為大家解讀Serverless架構(gòu)的的前世今生。 費(fèi)良宏 亞馬遜AWS首席云計(jì)算技術(shù)顧問(wèn) 在過(guò)去的20多年他一直從事軟件架構(gòu)、程序開發(fā)以及技術(shù)推廣等領(lǐng)域的工作。他的興趣主要是研究軟件架構(gòu)的演進(jìn),尤其是云計(jì)算方面的架構(gòu)實(shí)踐。費(fèi)良宏經(jīng)常在各類技術(shù)會(huì)議上發(fā)表演講進(jìn)行分享,他還是多個(gè)技術(shù)社區(qū)的熱心參與者。他擅長(zhǎng)Web領(lǐng)域應(yīng)用、移動(dòng)應(yīng)用以及機(jī)器學(xué)習(xí)等的開發(fā),也從事過(guò)多個(gè)大型軟件項(xiàng)目的設(shè)計(jì)、開發(fā)與項(xiàng)目管理。目前他專注與云計(jì)算以及互聯(lián)網(wǎng)等技術(shù)領(lǐng)域,致力于幫助中國(guó)的開發(fā)者構(gòu)建基于云計(jì)算的新一代的互聯(lián)網(wǎng)應(yīng)用。 今天大多數(shù)公司在開發(fā)應(yīng)用程序并將其部署在服務(wù)器上的時(shí)候,無(wú)論是選擇公有云還是私有的數(shù)據(jù)中心,都需要提前了解究竟需要多少臺(tái)服務(wù)器、多大容量的存儲(chǔ)和數(shù)據(jù)庫(kù)的功能等,并需要部署運(yùn)行應(yīng)用程序和依賴的軟件到基礎(chǔ)設(shè)施之上。假設(shè)我們不想在這些細(xì)節(jié)上花費(fèi)精力,是否有一種簡(jiǎn)單的架構(gòu)模型能夠滿足我們這種想法?這個(gè)答案已經(jīng)存在,這就是今天軟件架構(gòu)世界中新鮮但是很熱門的一個(gè)話題——Serverless(無(wú)服務(wù)器)架構(gòu)。 什么是Serverless 如同許多新的概念一樣,Serverless目前還沒(méi)有一個(gè)普遍公認(rèn)的權(quán)威的定義。最新的一個(gè)定義是這樣描述的:“無(wú)服務(wù)器架構(gòu)是基于互聯(lián)網(wǎng)的系統(tǒng),其中應(yīng)用開發(fā)不使用常規(guī)的服務(wù)進(jìn)程。相反,它們僅依賴于第三方服務(wù)(例如AWS Lambda服務(wù)),客戶端邏輯和服務(wù)托管遠(yuǎn)程過(guò)程調(diào)用的組合?!?/p>
最開始,“無(wú)服務(wù)器”架構(gòu)試圖幫助開發(fā)者擺脫運(yùn)行后端應(yīng)用程序所需的服務(wù)器設(shè)備的設(shè)置和管理工作。這項(xiàng)技術(shù)的目標(biāo)并不是為了實(shí)現(xiàn)真正意義上的“無(wú)服務(wù)器”,而是指由第三方云計(jì)算供應(yīng)商負(fù)責(zé)后端基礎(chǔ)結(jié)構(gòu)的維護(hù),以服務(wù)的方式為開發(fā)者提供所需功能,例如數(shù)據(jù)庫(kù)、消息,以及身份驗(yàn)證等。簡(jiǎn)單地說(shuō),這個(gè)架構(gòu)的就是要讓開發(fā)人員關(guān)注代碼的運(yùn)行而不需要管理任何的基礎(chǔ)設(shè)施。程序代碼被部署在諸如AWS Lambda這樣的平臺(tái)之上,通過(guò)事件驅(qū)動(dòng)的方法去觸發(fā)對(duì)函數(shù)的調(diào)用。很明顯,這是一種完全針對(duì)程序員的架構(gòu)技術(shù)。其技術(shù)特點(diǎn)包括了事件驅(qū)動(dòng)的調(diào)用方式,以及有一定限制的程序運(yùn)行方式,例如AWS Lambda的函數(shù)的運(yùn)行時(shí)間默認(rèn)為3秒到5分鐘。從這種架構(gòu)技術(shù)出現(xiàn)的兩年多時(shí)間來(lái)看,這個(gè)技術(shù)已經(jīng)有了非常廣泛的應(yīng)用,例如移動(dòng)應(yīng)用的后端和物聯(lián)網(wǎng)應(yīng)用等。簡(jiǎn)而言之,無(wú)服務(wù)器架構(gòu)的出現(xiàn)不是為了取代傳統(tǒng)的應(yīng)用。然而,從具有高度靈活性的使用模式及事件驅(qū)動(dòng)的特點(diǎn)出發(fā),開發(fā)人員/架構(gòu)師應(yīng)該重視這個(gè)新的計(jì)算范例,它可以幫助我們達(dá)到減少部署、提高擴(kuò)展性并減少代碼后面的基礎(chǔ)設(shè)施的維護(hù)負(fù)擔(dān)。 Serverless的歷史 Serverless這個(gè)概念并不容易理解。乍見之下,很容易讓人混淆硬件服務(wù)器及軟件上的服務(wù)與其所謂的“服務(wù)器”差別。在這里強(qiáng)調(diào)的所謂“無(wú)服務(wù)器”指的是我們的代碼不會(huì)明確地部署在某些特定的軟件或者硬件的服務(wù)器上。運(yùn)行代碼托管的環(huán)境是由諸如AWS這樣的云計(jì)算廠商所提供的。
Serverless這個(gè)詞第一次被使用大約是2012年由Ken Form所寫的一篇名為《Why The Future of Software and Apps is Serverless》的文章。這篇文章談到的內(nèi)容是關(guān)于持續(xù)集成及源代碼控制等內(nèi)容,并不是我們今天所特指的這一種架構(gòu)模式。但Amazon在2014年發(fā)布的AWS Lambda讓“Serverless”這一范式提高到一個(gè)全新的層面,為云中運(yùn)行的應(yīng)用程序提供了一種全新的系統(tǒng)體系結(jié)構(gòu)。至此再也不需要在服務(wù)器上持續(xù)運(yùn)行進(jìn)程以等待HTTP請(qǐng)求或API調(diào)用,而是可以通過(guò)某種事件機(jī)制觸發(fā)代碼的執(zhí)行,通常這只需要在AWS的某臺(tái)服務(wù)器上配置一個(gè)簡(jiǎn)單的功能。此后Ant Stanley 在2015年7月的名為《Server are Dead…》的文章中更是圍繞著AWS Lambda及剛剛發(fā)布的AWS API Gateway這兩個(gè)服務(wù)解釋了他心目中的Serverless,“Server are dead…they just don't know it yet”。到了2015年10月份,在那一年的AWS re:Invent大會(huì)上,Serverless的這個(gè)概念更是反復(fù)出現(xiàn)在了很多場(chǎng)合。印象中就包括了“(ARC308)The Serverless Company Using AWS Lambda”及“(DVO209)JAWS: The Monstrously Scalable Serverless Framework”這些演講當(dāng)中。隨著這個(gè)概念的進(jìn)一步發(fā)酵,2016年10月在倫敦舉辦了第一屆的Serverlessvconf。在兩天時(shí)間里面,來(lái)自全世界40多位演講嘉賓為開發(fā)者分享了關(guān)于這個(gè)領(lǐng)域進(jìn)展。
在Serverless的世界里面,AWS扮演了一個(gè)非常重要的角色。但是AWS并不是唯一的Serverless架構(gòu)服務(wù)的供應(yīng)商。其他廠商,例如Google Cloud Functions、Microsoft Azure Functions、IBM OpenWhisk、Iron.io和Webtask等各種開源平臺(tái)都提供了類似的服務(wù)。 Serverless與FaaS 微服務(wù)(MicroService)是軟件架構(gòu)領(lǐng)域業(yè)另一個(gè)熱門的話題。如果說(shuō)微服務(wù)是以專注于單一責(zé)任與功能的小型功能塊為基礎(chǔ),利用模組化的方式組合出復(fù)雜的大型應(yīng)用程序,那么我們還可以進(jìn)一步認(rèn)為Serverless架構(gòu)可以提供一種更加“代碼碎片化”的軟件架構(gòu)范式,我們稱之為Function as a Services(FaaS)。而所謂的“函數(shù)”(Function)提供的是相比微服務(wù)更加細(xì)小的程序單元。例如,可以通過(guò)微服務(wù)代表為某個(gè)客戶執(zhí)行所有CRUD操作所需的代碼,而FaaS中的“函數(shù)”可以代表客戶所要執(zhí)行的每個(gè)操作:創(chuàng)建、讀取、更新,以及刪除。當(dāng)觸發(fā)“創(chuàng)建賬戶”事件后,將通過(guò)AWS Lambda函數(shù)的方式執(zhí)行相應(yīng)的“函數(shù)”。從這一層意思來(lái)說(shuō),我們可以簡(jiǎn)單地將Serverless架構(gòu)與FaaS概念等同起來(lái)。 FaaS與PaaS的比較 乍看起來(lái),F(xiàn)aaS與PaaS的概念在某些方面有許多相似的地方。人們甚至認(rèn)為FaaS就是另一種形式的PaaS。但是Intent Media的工程副總裁Mike Roberts有自己的不同看法:“大部分PaaS應(yīng)用無(wú)法針對(duì)每個(gè)請(qǐng)求啟動(dòng)和停止整個(gè)應(yīng)用程序,而FaaS平臺(tái)生來(lái)就是為了實(shí)現(xiàn)這樣的目的?!?/span>
FaaS和PaaS在運(yùn)維方面最大的差異在于縮放能力。對(duì)于大部分PaaS平臺(tái),用戶依然需要考慮縮放。但是對(duì)于FaaS應(yīng)用,這種問(wèn)題完全是透明的。就算將PaaS應(yīng)用設(shè)置為自動(dòng)縮放,依然無(wú)法在具體請(qǐng)求的層面上進(jìn)行縮放,而FaaS應(yīng)用在成本方面效益就高多了。AWS云架構(gòu)戰(zhàn)略副總裁Adrian Cockcroft曾經(jīng)針對(duì)兩者的界定給出了一個(gè)簡(jiǎn)單的方法:“如果你的PaaS能夠有效地在20毫秒內(nèi)啟動(dòng)實(shí)例并運(yùn)行半秒,那么就可以稱之為Serverless”。 Serverless架構(gòu)的優(yōu)點(diǎn) 降低運(yùn)營(yíng)成本 Serverless是非常簡(jiǎn)單的外包解決方案。它可以讓您委托服務(wù)提供商管理服務(wù)器、數(shù)據(jù)庫(kù)和應(yīng)用程序甚至邏輯,否則您就不得不自己來(lái)維護(hù)。由于這個(gè)服務(wù)使用者的數(shù)量會(huì)非常龐大,于是就會(huì)產(chǎn)生規(guī)模經(jīng)濟(jì)效應(yīng)。在降低成本上包含了兩個(gè)方面,即基礎(chǔ)設(shè)施的成本和人員(運(yùn)營(yíng)/開發(fā))的成本。 降低開發(fā)成本 IaaS和PaaS存在的前提是,服務(wù)器和操作系統(tǒng)管理可以商品化。Serverless作為另一種服務(wù)的結(jié)果是整個(gè)應(yīng)用程序組件被商品化。 擴(kuò)展能力 Serverless架構(gòu)一個(gè)顯而易見的優(yōu)點(diǎn)即“橫向擴(kuò)展是完全自動(dòng)的、有彈性的、且由服務(wù)提供者所管理”。從基本的基礎(chǔ)設(shè)施方面受益最大的好處是,您只需支付您所需要的計(jì)算能力。 更簡(jiǎn)單的管理 Serverless架構(gòu)明顯比其他架構(gòu)更簡(jiǎn)單。更少的組件,就意味著您的管理開銷會(huì)更少。 “綠色”的計(jì)算 按照《福布斯》雜志的統(tǒng)計(jì),在商業(yè)和企業(yè)數(shù)據(jù)中心的典型服務(wù)器僅提供5%~15%的平均最大處理能力的輸出。這無(wú)疑是一種資源的巨大浪費(fèi)。隨著Serverless架構(gòu)的出現(xiàn),讓服務(wù)提供商提供我們的計(jì)算能力最大限度滿足實(shí)時(shí)需求。這將使我們更有效地利用計(jì)算資源。 Serverless的架構(gòu)范式 移動(dòng)應(yīng)用后臺(tái)Serverless參考架構(gòu)如圖2所示。 圖2 移動(dòng)應(yīng)用后臺(tái)Serverless參考架構(gòu) 實(shí)時(shí)文件處理Serverless參考架構(gòu)如圖3所示。 圖3 實(shí)時(shí)文件處理Serverless參考架構(gòu) Web應(yīng)用Serverless參考架構(gòu)如圖4所示。 圖4 Web應(yīng)用Serverless參考架構(gòu) 物聯(lián)網(wǎng)應(yīng)用后臺(tái)參考架構(gòu)如圖5所示。 圖5 物聯(lián)網(wǎng)應(yīng)用后臺(tái)參考架構(gòu) 實(shí)時(shí)流處理Serverless參考架構(gòu)如圖6所示。 圖6 實(shí)時(shí)流處理Serverless參考架構(gòu) 美麗新世界 技術(shù)上不可能有應(yīng)用程序可以不依賴于服務(wù)器,必須要有某種硬件來(lái)支持應(yīng)用程序。但是以AWS Lambda為代表的Serverless架構(gòu)可以使得開發(fā)人員專注于程序功能本身,而讓AWS處理與服務(wù)器部署、存儲(chǔ)和數(shù)據(jù)庫(kù)相關(guān)的所有復(fù)雜性工作。這聽起來(lái)很簡(jiǎn)單,但是實(shí)現(xiàn)起來(lái)卻并不簡(jiǎn)單。這種新的架構(gòu)打破了人們的習(xí)慣思維,它讓服務(wù)器不可見,并提供了一個(gè)極具成本效益的服務(wù)。 Serverless架構(gòu)僅有兩年的歷史,仍處于起步階段。未來(lái),這個(gè)領(lǐng)域還會(huì)有更大的進(jìn)步,這將是非常有趣的。它給所有開發(fā)人員帶來(lái)的是軟件架構(gòu)和應(yīng)用程序部署的美麗新世界。 |
|
來(lái)自: 昵稱34195792 > 《技術(shù)》