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