隨著2014年AWS Lambda的發(fā)布和流行,近年來有關(guān)Serverless的話題和討論越來越頻繁。究竟什么是Serverless?為什么需要Serverless? Serverless是否意味著從此不再需要服務(wù)器了?Serverless究竟能為開發(fā)運維帶來哪些便利呢?
回溯本源
讓我們先來回顧一下常見的應(yīng)用服務(wù)開發(fā)上線流程。
一、直接使用物理設(shè)備:
開發(fā)者將應(yīng)用程序開發(fā)測試完畢后,直接將程序和相關(guān)軟件部署在物理設(shè)備上。服務(wù)器直接使用物理機。直接使用物理設(shè)備部署應(yīng)用程序不可避免地需要大量人工運維和重復(fù)勞動。比方說,用戶數(shù)量逐漸增長時,我們需要擴容物理設(shè)備以應(yīng)對更高的網(wǎng)站訪問壓力。
這時候我們需要購置更多的物理服務(wù)器,并且搬運到機房的對應(yīng)機架機柜中。然后,我們需要手動為新購置的物理服務(wù)器安裝各種運行軟件,填寫好配置文件,手動部署啟動好需要運行的應(yīng)用程序。這些大量的重復(fù)運維勞動造成產(chǎn)品上線慢,迭代周期長。其次,使用物理設(shè)備直接部署應(yīng)用程序?qū)?dǎo)致資源浪費。如今的物理服務(wù)器的配置越來越強大,64核128G在今天看來也不過是普通配置。很難想象你買了一臺32核的物理機,卻只想搭建個人博客。此外,電商行業(yè)經(jīng)常為了應(yīng)對促銷秒殺等活動準(zhǔn)備大量的物理資源,然而在非促銷等流量低谷時段,大量物理資源處理閑置狀態(tài),不利于節(jié)約成本。
最后,為了解決資源浪費的問題,我們很容易想到,可以將多個應(yīng)用程序部署在同一臺服務(wù)器上來充分利用資源。但由此又導(dǎo)致了新的麻煩,不同的應(yīng)用程序經(jīng)常會搶占CPU,磁盤IO,內(nèi)存,難以做到隔離資源,各行其是,互不干擾。
二、IaaS托管硬件
虛擬化技術(shù)的成熟直接解決了上述直接使用物理設(shè)備的幾個痛點。
首先,使用IaaS平臺,服務(wù)器由物理機變成了虛擬機。申請服務(wù)器資源僅需要調(diào)用IaaS平臺的API或者點擊控制臺頁面就可以輕松完成。CPU個數(shù),內(nèi)存大小,網(wǎng)絡(luò)帶寬,存儲磁盤大小都可以按需指定,隨心所欲。虛擬機被玩壞了也不需要重裝系統(tǒng)修復(fù),刪除重建新虛擬機即可。擴容服務(wù)器不再需要大量的重復(fù)人工運維勞動,加速了產(chǎn)品上線和迭代。
其次,使用IaaS平臺一定程度上減輕了資源浪費。在IaaS平臺上很容易得申請和刪除虛擬機,升降帶寬配置等操作,這樣當(dāng)業(yè)務(wù)低谷時段直接刪除多余的虛擬機,降低帶寬購買配額,就能節(jié)約不少成本。
最后,IaaS平臺解決了資源隔離的問題。不同虛擬機之前有獨立CPU,內(nèi)存,磁盤,網(wǎng)卡,不同虛擬機之前的程序不會進(jìn)行資源搶占。
然而,IaaS平臺僅僅為開發(fā)者做好了硬件托管的工作。開發(fā)者依然需要為虛擬機安裝操作系統(tǒng)和各種軟件,填寫配置并部署應(yīng)用;依然需要關(guān)注服務(wù)器,帶寬,存儲等資源的使用量和擴容縮容。此外,IaaS平臺沒有完全解決資源浪費的問題,實際上,大量虛擬機在日常運行中依然存在超低負(fù)載運行的情況。
三、 PaaS托管應(yīng)用
使用PaaS平臺,開發(fā)者無需關(guān)注服務(wù)器的申請采購、系統(tǒng)安裝和資源容量。PaaS服務(wù)提供商為開發(fā)者提供好了操作系統(tǒng)和開發(fā)環(huán)境以及支持的SDK和API,還能自動調(diào)整資源來幫助應(yīng)用服務(wù)更好的應(yīng)對突發(fā)流量。有了PaaS平臺,開發(fā)者僅僅需要把應(yīng)用開發(fā)好,然后在PaaS平臺完成服務(wù)部署,應(yīng)用服務(wù)即可上線。
相比IaaS平臺,PaaS平臺能更加精準(zhǔn)的為應(yīng)用程序所消耗的資源計費。IaaS平臺僅僅依據(jù)用戶申請的資源量,如CPU核心數(shù),網(wǎng)絡(luò)帶寬來計費,而不關(guān)注用戶是否實際真正充分使用了其所申請到的資源。PaaS平臺則可以通過統(tǒng)計應(yīng)用程序所占用的CPU使用率和內(nèi)存使用率來做的更精準(zhǔn)的計費,甚至可以實現(xiàn)應(yīng)用層面的計費,比如服務(wù)響應(yīng)時間,或者應(yīng)用所消耗的事務(wù)。
什么是Serverless?
圖1:互聯(lián)網(wǎng)應(yīng)用傳統(tǒng)架構(gòu)的模型和Serverless架構(gòu)模型