天天看點

從函數計算架構看 Serverless 的演進與思考

從函數計算架構看 Serverless 的演進與思考

作者 | 楊皓然  阿裡巴巴進階技術專家

導讀:雲計算之是以能夠成為 DT 時代颠覆性力量,是因為其本質是打破傳統架構模式、降低成本并簡化體系結構,用全新的思維更好的滿足了使用者需求。而無伺服器計算(Serverless Computing)作為這個巨大市場的下一個階段的進化産物,将真正幫助企業實作隻專注于業務和建構應用程式,而不必擔心 IT 基礎設施,這也将成為雲服務商未來競争的關鍵。

什麼是無伺服器計算

雲原生計算基金會(Cloud Native Computing Foundation, CNCF)對無伺服器計算作了如下定義:

Serverless computing refers to the concept of building and running applications that do not require server management. It describes a finer-grained deployment model where applications, bundled as one or more functions, are uploaded to a platform and then executed, scaled, and billed in response to the exact demand needed at the moment.

無伺服器計算是指開發者在建構和運作應用時無需管理伺服器等基礎設施。應用被解耦為細粒度的函數,函數是部署和運作的基本機關;使用者隻為實際使用的資源付費。可見,serverless 計算能夠幫助應用開發者擺脫伺服器等底層基礎設施管理的負擔,專注于業務層的創新。

從函數計算架構看 Serverless 的演進與思考

圖 1 - 無伺服器計算的特點

無伺服器計算的發展曆史

實際上,Serverless 不是一個新概念。計算、存儲等領域的很多服務都是 serverless 的模式。例如阿裡雲推出的第一個雲服務,對象存儲(OSS),就是 serverless 形态的存儲服務。使用者不需要關心資料是如何存儲在底層伺服器上,隻為實際使用的存儲資源付費。

統計資料表明,近年來,各個雲服務商推出的新服務/新功能,超過 70% 都是 serverless 形态。随着雲端 serverless 類型的服務種類越來越豐富,使用者能夠快速使用多種服務建構彈性高可用的雲原生應用。是以,serverless 計算正變得越來越流行。

從函數計算架構看 Serverless 的演進與思考

圖 2 – 無伺服器計算已經無處不在

從函數計算架構看無伺服器計算的特性

在 serverless 計算中,平台服務接管了底層基礎設施的管理,是以平台服務必須處理好容錯和資源伸縮等問題,才能充分發揮 serverless 計算的能力。

從阿裡雲函數計算架構圖不難看出:API 服務層完成身份驗證、中繼資料的讀寫等功能。

  • 同步調用函數時,API 服務子產品從資源排程子產品擷取可用的函數執行引擎并發送請求,最後取回結果;
  • 異步調用函數時,則将事件寫入到消息隊列後即傳回。由事件分發子產品分發事件,整個流程和同步調用類似。
從函數計算架構看 Serverless 的演進與思考

圖 3 - 阿裡雲函數計算架構

實時彈性伸縮是函數計算的核心優勢,當使用者負載出現波峰時,系統能實時擴張資源,平滑應對峰值通路。以異步事件處理為例,整個處理流程分為三步:

  1. 事件寫入函數計算的事件隊列;
  2. 事件分發器從隊列中讀取事件,并調用對應的函數處理事件;
  3. 使用者函數處理事件。
從函數計算架構看 Serverless 的演進與思考

圖 4 - 函數計算實時伸縮

函數計算系統會監控使用者的負載變化,各元件均能夠根據使用者負載動态伸縮。如上圖所示,當使用者 A 的事件産生速率變大時,系統會自動在每個環節給 A 配置設定更多的資源,以比對事件處理的能力。

函數計算采用多級資源排程政策,系統會根據使用者負載和資源池水位預判需求,提前準備好計算資源。依托于阿裡雲飛天分布式系統平台多年的技術積累,在排程的實時性和準确性上取得了很好的平衡,具備毫秒級彈性伸縮的能力。

無伺服器計算的典型應用場景

借助函數計算,使用者幾乎可以建構任何類型的應用程式或後端服務,包括 Web 應用後端服務,大規模檔案處理,資料實時流式處理等等。

例如借助對象存儲和函數計算的內建,使用者隻需要編寫函數處理單個視訊。當有大量視訊檔案被上傳到對象存儲服務後,會自動觸發多個函數執行個體并發處理。

從函數計算架構看 Serverless 的演進與思考

圖 5 - Serverless 視訊轉碼服務

使用函數計算的 HTTP 觸發器,使用者隻需要編寫函數處理單個請求。當 TPS 升高時,函數計算會自動擴容計算資源執行多個函數執行個體處理請求。

從函數計算架構看 Serverless 的演進與思考

圖 6 - Serverless 網站後端服務

無伺服器計算對使用者的價值

自阿裡雲函數計算上線以來,被開發者廣泛的用于大規模多媒體資料并行處理、日志/物聯網資料的流式處理以及網站後端服務等場景中。從實際使用情況來看,serverless 計算在工程效率、可靠性、性能、成本和安全性等方面給使用者帶來了巨大的價值。

  • 工程效率:借助函數計算和其他雲端服務的內建,使用者隻需要編寫少量代碼就可以串聯多個服務完成複雜的功能。使用者不需要負擔伺服器配置/更新,資源擴容/縮容等繁瑣工作,運維成本大幅降低;
  • 可靠性:使用者不需要購買或維護任何的伺服器,不需要安裝任何的軟體,借助函數計算,系統自動處理基礎設施層各種錯誤,減少當機、網絡中斷等危機情況發生,提升系統可靠性;
  • 彈性伸縮:應用程式所需計算資源的伸縮能在毫秒級别由 serverless 計算平台自動完成,使用者不需要負責增減伺服器的數量;
  • 低成本:不需要對計算和存儲之類的服務預留容量。如果代碼沒有運作,就不會收費。研究資料表明,70% 以上的伺服器資源并未得到充分利用,函數計算采用全新模式,資源使用率達 100%,實踐結果顯示,通常能節省 10%-90% 的成本。

也就是說,借助函數計算意味着開發者可以專注在産品代碼上,而無須管理和操作雲端或本地的伺服器或運作時。生産實踐中,使用者用幾百行代碼就可以實作一個規模上億、日調用次數幾十億次的圖檔處理服務。

從雲計算 1.0 時代到 2.0 時代

雲計算 1.0 時代,基礎設施的雲化(IaaS)為使用者提供了和傳統 IT 環境近乎一緻的體驗,讓使用者能把應用無縫遷移到雲端。當人人都能擷取所需的計算資源後,如何更高效的管理和使用計算資源,函數即服務(FaaS)則是雲計算 2.0 時代最為重要的問題。阿裡雲函數計算這樣的無伺服器計算服務,能夠從工程效率、可靠性、性能、成本和安全性等方面給使用者帶來巨大的價值,為廣大開發者打開了一扇通往美麗新世界的大門。

10 月 9 日,阿裡雲宣布正式推出

函數計算 2.0 解決方案

,為使用者提供更具成本效益和更高效開發運維體驗的 Serverless 計算服務。函數計算 2.0 提供了豐富的計費方式,全新的執行個體類型、靈活的自定義運作時、全方位更新的工具鍊。

從函數計算架構看 Serverless 的演進與思考

圖 7 - 預付費和後付費

函數計算 2.0 

通過一系列創新的功能,解決了目前 Serverless 計算服務在成本、性能、應用建構等方面的痛點,極具競争力。

全球首家推出預付費(包年包月)的計費模式。相較于後付費,預付費單價降低 70% 以上。應用所需資源中穩定部分使用預付費模式,單價低;彈性部分使用後付費,資源使用率高。結合預付費和後付費,使用者能夠顯著降低成本。

從函數計算架構看 Serverless 的演進與思考

圖 8 - 預留執行個體和按量執行個體

更重要的是,函數計算 2.0 新增預留執行個體類型,允許使用者自行管理執行個體的申請和釋放。

通過預留執行個體,使用者能夠提前預熱函數或者長期保持常駐執行個體,杜絕因為執行個體啟動帶來的請求延遲。當負載超過預留執行個體處理能力,系統會自動擴容,使用按量執行個體處理請求。同時函數計算提供了詳細的執行個體使用名額,幫助使用者輕松預留合理數目的執行個體。

從函數計算架構看 Serverless 的演進與思考

圖 9 - 使用者體驗

使用者在函數計算平台上建構彈性高可用的雲原生應用,如果沒有好用的開發、調試、運維工具,使用體驗将大打折扣。

函數計算 2.0 大幅增強了 Serverless 應用建構、運維等方面的使用者體驗。使用者可以在自己的開發機本地環境中建立和雲端運作環境一緻的沙盒,進行依賴包安裝、斷點調試等操作。

函數計算 2.0 也提供了 VSCode,Intellij Idea,PyCharm 等流行開發工具的插件,通過圖形使用者界面的互動方式,進一步降低了工具的使用門檻。

歡迎加入函數計算群

從函數計算架構看 Serverless 的演進與思考
“ 阿裡巴巴雲原生微信公衆号(ID:Alicloudnative)關注微服務、Serverless、容器、Service Mesh等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的技術公衆号。”