Serverless 的運行原理與組件架構

本文重點探討下開發者使用 Serverless 時常常遇到的一些問題,以及如何解決

過去一年,咱們和大量 Serverless 用戶進行了線上和線下的交流,瞭解你們的業務場景、對 Serverless 的見解和使用體驗。html

大部分用戶認爲 Serverless 會是雲計算下一階段的必然趨勢,但不是如今。 爲何呢?由於構成 Serverless 架構的雲函數儘管有引覺得傲的自動擴縮能力,可是糟糕的開發體驗、讓人畏懼的冷啓動、原有業務的改造難題等等,均下降了使用者的信心。git

所以,儘管很多用戶承認 Serverless 的價值,但依然認爲其很難承載核心業務。github

針對這些關鍵問題,騰訊雲在今年 6 月份發佈了 Serverless 2.0,全面升級了產品形態、系統調度以及開發者工具。爲了便於你們理解,咱們就從雲函數的運行原理做爲切入點,以解釋問題產生的緣由以及雲函數的應對方法。數據庫


首先,咱們看一下雲函數,或者說 FaaS 和 IaaS、PaaS 的區別。

以下圖所示,FaaS 不只給用戶提供了標準的 Runtime,同時在應用層也幫用戶管理了請求的調度。開發者只須要聚焦在覈心業務邏輯開發,按照函數的粒度去編寫代碼。而與底層硬件相關的資源維護,則交給更加專業的雲廠商來搞定。express

所以,對於用戶來說,能夠把更多的精力和時間放在業務上。而 IaaS 和 PasS,則均須要用戶去運維雲主機或者容器集羣、搭建業務所需的運行環境。segmentfault

FaaS 所處的地位

其次,咱們來看下雲函數如何構成 Serverless 架構,以及雲函數如何幫助用戶作資源管理和請求調度。

在這裏咱們也將解答雲函數的冷啓、下降核心業務遷移複雜度等問題。後端

Serverless 促進架構演進

以下圖所示,開發者在實際使用時,能夠藉助 Web IDE 或者本地 IDE 完成代碼開發,而後經過插件、工具等方式把代碼及其相關依賴,一塊兒打包部署到雲函數平臺,用戶能夠自行選擇部署爲函數形態或者服務形態。安全

Serverless 2.0 運行原理

在代碼裏,用戶須要本身實現業務邏輯,好比訪問數據庫、對象存儲、消息隊列、第三方服務接口等。計算邏輯和後端服務共同構成了所謂的 Serverless 應用架構。而終端用戶根據平臺提供的請求方式,去觸發部署在雲函數平臺上的業務代碼,好比發送 http 請求,平臺會根據用戶的請求量去拉起相應的計算資源運行用戶代碼。架構

這裏須要重點關注函數形態和服務形態的差別,由於服務的形態能夠大大下降複雜業務遷移的成本。

  • 服務形態支持直接部署基於框架開發的核心業務,如 Node.js 的 express、koa 等框架,不用爲了應用 Serverless 而拆分紅函數。平臺會幫用戶啓動服務進程、端口監聽,同時服務形態不會限制業務的實際運行時長。
  • 函數形態和服務形態在收到用戶請求的時候,均能實現自動擴縮。併發

    • 函數形態會針對用戶的每一個請求都分配一個運行實例,所以全部請求的執行體驗是同樣的。當沒有請求的時候,平臺是沒有實例在運行的,因此能夠作到按需請求,可是這也會形成所謂的冷啓動 —— 即當用戶的首次請求進入平臺的時候,平臺會臨時拉起資源,而這個過程會消耗必定的時間。爲了消除冷啓,雲函數平臺會預先初始化一批不一樣規格的實例放在資源池中,當用戶有請求進入時,能夠快速從資源池申請一個實例,直接掛載用戶的代碼運行,從而下降了資源申請時間。同時,針對函數形態,平臺會根據歷史併發數據進行預測,幫用戶預留必定量的實例,這些實例會預先分配到用戶的帳號下而且加載好了用戶的代碼,從而不只直接消除了冷啓,也增長了實例複用概率。
    • 而服務形態能夠至少幫用戶預留一個常駐實例,而且把用戶的全部請求都投遞到首個實例,根據實例的使用狀況,自動的動態擴縮。

示意圖

  • 函數形態更適合新建項目,能夠敏捷迭代,業務按照函數的粒度開發,不只能夠輕鬆實現雲上多產品的聯動,也能夠享受函數的高併發及性能一致體驗。服務形態更適合已有項目的遷移、重度複雜業務、須要長時運行的業務。

最後講講 Serverless 2.0 的組件架構。

以下圖所示,用戶雖然只須要關注綠色部分和業務相關的代碼實現,可是平臺也須要提供強大的開發者工具來保障開發和使用體驗。如雲函數推出的 Serverless 本地開發工具、VS Code 插件,與 CODING 聯合推出的 Web IDE、DevOps 平臺等,均能很大程度上提高開發、部署效率,實現本次開發、本地調試、聯動雲端調試、本地部署、版本發佈等能力。

組件架構

同時,雲函數也完善了配套的監控和告警機制,提供如調用次數、內存使用、併發使用、超時、代碼錯誤等多維度的監控和告警能力。這些基礎設施、資源管理、安全、容災等能力,是雲函數平臺必備的基礎能力,也是開發者關心的核心能力。

Serverless 不只僅是計算,還須要不斷完善周邊生態。

隨着用戶量的增長,Serverless 必然會面臨更多的挑戰 —— 怎麼幫助用戶組織管理代碼,怎麼解決帶狀態的業務訴求,怎麼實現數據庫鏈接數管理,怎麼實現應用級部署等等。咱們也在不斷探索和優化用戶的使用體驗,計劃提供諸如 Serverless DB、性能監控、日誌分析、Serverless 框架、函數編排、高性能調用等功能。

後續的專欄文章也將陸續解讀更多核心能力,幫助開發者更好地理解和使用 Serverless。

Serverless is more!

傳送門:

歡迎訪問:Serverless 中文網,您能夠在 最佳實踐 裏體驗更多關於 Serverless 應用的開發!

推薦閱讀: 《Serverless 架構:從原理、設計到項目實戰》
相關文章
相關標籤/搜索