serverless計算到底帶來了什么技術突破?
serverless計算到底帶來了什么技術突破?關于這個問題有不少爭論,許多人認為serverless計算不過是一些已有技術的重組和封裝,只是對一些PaaS產(chǎn)品(如Heroku, Firebase, Parse)的簡單整合歸納。甚至有一部分人認為上世紀90年代非常流行的web host共享技術就已經(jīng)實現(xiàn)了serverless的功能,比如他們都使用無狀態(tài)化的編程模型,并且提供多租戶機制。一個典型的例子就是CGI (Common Gateway Interface),它甚至允許你直接部署使用不同語言(Perl或PHP)編寫的腳本到服務器上運行。而之前提到的GAE早在serverless概念流行起來的幾年前就提供了相似的功能,但還是遭到了市場的否決,我們憑什么認為serverless是一種不同于PaaS和其他這些產(chǎn)品的革新呢?
今天使用cloud functions的serverless計算和它的前輩們有著幾個重要的不同,主要體現(xiàn)在:更好的自動縮擴容、強隔離性、平臺靈活度以及服務生態(tài)支持上。
以自動縮擴容為例,AWS Lambda提供的自動縮擴容能力和之前存在的類似功能相比拉開了顯著的距離:它能夠更精確地追蹤機器的負載并且快速響應縮擴容,甚至允許縮容到零實例狀態(tài)來實現(xiàn)零費用。同時,計費的粒度也精細到了毫秒級別,而不是之前的小時級,現(xiàn)在我們可以說,用戶的服務是真正按照代碼實際執(zhí)行的時間來收費的,而不是之前那樣按照需要執(zhí)行代碼的資源來收費的了。
serverless所需要的多租戶硬件共享依賴于高性能的安全隔離,目前的主流選擇是VM級隔離,但這里存在一個問題,就是VM的啟動速度比較慢,不足以支持serverless所需要的彈性縮擴容能力。為了解決這個問題,AWS Lambda使用了兩種VM實例的資源池,一種稱為“預熱池(warm pool)”,僅僅是被分配給對應的租戶(但是不啟動服務),另一種則被稱為“激活池(active pool)”,它們是之前已經(jīng)運行過函數(shù)服務的實例,并且會一直保持著去服務后續(xù)的請求。這些能夠實現(xiàn)硬件高利用率的資源生命周期管理和多租戶打包才是serverless的關鍵技術,使它區(qū)別于原有的類似產(chǎn)品。需要一提的是,為了解決多租戶隔離的開支問題,現(xiàn)在也有很多除VM之外的隔離方案,比如使用容器、unikernel、libraryOS、語言虛擬機(如JVM)等。
除了自動縮擴容和多租戶隔離外,serverless的其他幾個不同點也為它的成功奠定了基礎。相比于針對特定使用場景的PaaS服務,serverless計算所支持的應用范圍要廣泛得多,因為它允許用戶將外部的庫打包進服務,此外,今天的serverless計算的規(guī)模比起早起的web host共享技術要也要大得多。
在第1節(jié)中我們提過,cloud functions讓serverless這一名詞流行了起來。然而,它們的成功也離不開公有云早期時代出現(xiàn)的BaaS。