Serverless 的運行原理與組件架構

blank

Serverless 的運行原理與組件架構

上週我們分享了「 Serverless基本概念入門」,本章將不再贅述Serverless的基礎知識和優勢。
我們將重點探討下現階段,開發者使用Serverless時經常遇到的一些問題,以及騰訊雲Serverless為此做的一些探索。

過去一年,我們和大量Serverless 用戶進行了線上和線下的交流,了解大家的業務場景、對Serverless 的看法和使用體驗。

大部分用戶認為Serverless會是雲計算下一階段的必然趨勢,但不是現在。為什麼呢?因為構成Serverless 架構的雲函數儘管有引以為傲的自動擴縮能力,但是糟糕的開發體驗、讓人畏懼的冷啟動、原有業務的改造難題等等,均降低了使用者的信心。

因此,儘管不少用戶認可Serverless 的價值,但依然認為其很難承載核心業務。

針對這些關鍵問題,騰訊雲在今年6 月份發布了Serverless 2.0,全面升級了產品形態、系統調度以及開發者工具。為了便於大家理解,我們就從雲函數的運行原理作為切入點,以解釋問題產生的原因以及雲函數的應對方法。


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

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

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

blank

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

在這裡我們也將解答云函數的冷啟、降低核心業務遷移複雜度等問題。

blank

如下圖所示,開發者在實際使用時,可以藉助Web IDE 或者本地IDE 完成代碼開發,然後通過插件、工具等方式把代碼及其相關依賴,一起打包部署到雲函數平台,用戶可以自行選擇部署為函數形態或者服務形態。

blank

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

這裡需要重點關注函數形態和服務形態的差異,因為服務的形態可以大大降低複雜業務遷移的成本。

  • 服務形態支持直接部署基於框架開發的核心業務,如Node.js 的express、koa 等框架,不用為了應用Serverless 而拆分成函數。平台會幫用戶啟動服務進程、端口監聽,同時服務形態不會限制業務的實際運行時長。
  • 函數形態和服務形態在收到用戶請求的時候,均能實現自動擴縮。
    • 函數形態會針對用戶的每個請求都分配一個運行實例,因此所有請求的執行體驗是一樣的。當沒有請求的時候,平台是沒有實例在運行的,所以可以做到按需請求,但是這也會造成所謂的冷啟動—— 即當用戶的首次請求進入平台的時候,平台會臨時拉起資源,而這個過程會消耗一定的時間。為了消除冷啟,雲函數平台會預先初始化一批不同規格的實例放在資源池中,當用戶有請求進入時,可以快速從資源池申請一個實例,直接掛載用戶的代碼運行,從而降低了資源申請時間。同時,針對函數形態,平台會根據歷史並發數據進行預測,幫用戶預留一定量的實例,這些實例會預先分配到用戶的賬號下並且加載好了用戶的代碼,從而不僅直接消除了冷啟,也增加了實例復用機率。
blank
    • 而服務形態可以至少幫用戶預留一個常駐實例,並且把用戶的所有請求都投遞到首個實例,根據實例的使用情況,自動的動態擴縮。
  • 函數形態更適合新建項目,可以敏捷迭代,業務按照函數的粒度開發,不僅可以輕鬆實現雲上多產品的聯動,也可以享受函數的高並發及性能一致體驗。服務形態更適合已有項目的遷移、重度複雜業務、需要長時運行的業務。

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

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

blank

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

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

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

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

Serverless is more!


Serverless Framework 30 天試用計劃

我們誠邀您來體驗最便捷的Serverless 開發和部署方式。在試用期內,相關聯的產品及服務均提供免費資源和專業的技術支持,幫助您的業務快速、便捷地實現Serverless!

詳情可查閱: Serverless Framework試用計劃

One More Thing

3 秒你能做什麼?喝一口水,看一封郵件,還是——部署一個完整的Serverless應用?

複製鏈接至PC瀏覽器訪問: serverless.cloud.tencent.com

3秒極速部署,立即體驗史上最快的Serverless HTTP實戰開發!

傳送門:

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

What do you think?

Written by marketer

第5 屆FEDAY 來啦! 9月21日,成都見!

blank

Remax – 使用真正的React 構建小程序