4月26日,在雲栖大會・南京峰會上,阿裡雲宣布函數計算(function compute)啟動邀測。這是國内首個事件驅動的無伺服器計算平台。使用者按需調用、按需付費,無需管理伺服器等基礎設施,特别适用于應用場景中有明顯波峰波谷的企業。
通過函數計算,使用者無需再管理伺服器等基礎設施,隻需編寫代碼并上傳。函數計算會為使用者準備好計算資源,以彈性、可靠的方式運作代碼,并提供日志查詢,性能監控,報警等功能。
借助于函數計算,可以快速建構任何類型的應用和服務,無需管理和運維。更棒的是,隻需要為代碼實際運作消耗的資源付費 ——代碼未運作則不産生費用。
讓我們以建構一個視訊處理後端服務為例,來體驗以serverless的方式開發應用的高效。
在示例場景中,使用者将生成的高清視訊檔案上傳到阿裡雲對象存儲(oss)上,這些視訊檔案需要轉碼為不同碼率的檔案(360p,720p,……)以适配不同的播放裝置。最終結果檔案被存儲到oss上,由使用者消費。
如果以傳統的server-based方式建構系統,使用者需要購買和設定伺服器,編碼實作高性能伺服器軟體。并且要考慮一系列容量預估、容錯、運維監控等方面的問題。例如,
需要多少台伺服器?什麼規格?
如何配置網絡/作業系統?
如何部署更新?
如何處理伺服器當機?
如何負載均衡?
如何根據負載實時動态伸縮?
如何對系統監控報警?
……
圖 1 server-based後端服務
如果以serverless的方式建構系統,使用者隻需要編寫處理單個請求的視訊轉碼函數,并設定相應的oss觸發器即可,函數計算系統會保證函數被可靠的執行。大大提高了開發效率。
圖 2 serverless後端服務
接下來,讓我們從安全性,可用性和可擴充性的角度來審視函數計算的架構。看看它是如何幫助使用者建構彈性高可用的應用。
整個系統架構如下圖所示。api服務層完成身份驗證,中繼資料的讀寫等功能。如果是同步函數調用請求,則api server從資源排程子產品擷取可用的函數執行引擎并發送請求,最後取回結果。如果是異步調用,則将事件寫入到消息隊列後即傳回。由事件分發子產品分發事件,整個流程和同步調用類似。
圖 3 函數計算架構
作為一個通用的計算服務,函數計算允許使用者運作任意代碼。是以保證使用者資訊安全是函數計算最高優先級的目标。我們在系統設計中堅持以下兩個原則:
使用最進階别的安全隔離技術,提供與阿裡雲ecs同等級的安全隔離性。
通路使用者的任何資源均需得到使用者的顯式授權。
整個計算環境的隔離分為兩個層面:
執行使用者函數的計算資源和函數計算系統的網絡是互相隔離的。
不同使用者的計算資源和網絡是互相隔離的。
通過多層次,多元度的安全隔離,確定使用者和函數計算服務本身的資訊安全性。
要保證使用者函數被可靠的執行,函數計算需要處理以下兩類場景:
非預期中斷。例如程式崩潰,機器當機,網絡分割故障(network partition)等等。
預期中斷。例如使用者函數、函數計算系統的更新等等。
非預期中斷的處理能力是任何分布式系統都要具備的基本能力,相關技術已經非常成熟,細節我們不再贅述。函數計算本身和依賴的阿裡雲服務都具備高可用的特性。在有條件的區域,函數計算的系統會跨多個可用區部署,提供更進階别的容災能力。
對于預期的中斷,函數計算系統自身和使用者函數都可以做到平滑更新。當更新發生時,正在執行的請求不會被終止,系統會等待請求處理完成,再執行更新操作。未來我們将支援函數的多版本(幫助使用者快速復原)、灰階釋出等功能,進一步減輕使用者的運維負擔。
實時彈性伸縮是函數計算的核心優勢,當使用者負載出現波峰時,系統能實時擴張資源,平滑應對峰值通路。以異步事件處理為例,整個處理流程分為三步:
事件寫入函數計算的事件隊列。
事件分發器從隊列中讀取事件,并調用對應的函數處理事件。
使用者函數處理事件。
函數計算系統會監控使用者的負載變化,各元件均能夠根據使用者負載動态伸縮。如上圖所示,當使用者a的事件産生速率變大時,系統會自動在每個環節給a配置設定更多的資源,以比對事件處理的能力。
函數計算采用多級資源排程政策,系統會根據使用者負載和資源池水位預判需求,提前準備好計算資源。依托于飛天分布式平台多年的積累,在排程的實時性和準确性上取得了很好的平衡,具備毫秒級彈性伸縮的能力。
另一方面,實時彈性伸縮也是一柄雙刃劍,函數有可能被錯誤觸發,不但影響服務可用性,也給使用者造成财務損失。以上述視訊轉碼系統為例,每當有新的視訊被上傳到對象服務(oss)的指定目錄後,函數就會被觸發進行轉碼。但如果使用者不小心把處理後的結果檔案也寫入到了源目錄,則形成了一個事件觸發的環,導緻函數會以指數級速度被錯誤觸發,且永遠不能終止。是以系統必須要能控制和隔離錯誤函數的影響。
函數計算在使用者粒度設定了函數最大并發調用限制(允許使用者自定義),保證使用者的費用不會超過一個上限。同時,整個系統從不同層次,不同次元對使用者使用的資源進行流控,確定在多租戶的環境中,使用者不會互相影響。此外,提供豐富的監控和報警功能,能夠及時通知使用者處理。