Serverless 入門學習


MVC 架構

  • MVC
    前端: View 層
    后端: Control 層 && Model 層


Serverless 解決問題的邊界,就是服務端的邊界,即服務端運維。

Serverless

  • 狹義 Serverless(最常見)= Serverless computing 架構 = FaaS 架構 = Trigger(事件驅動)+ FaaS(函數即服務)+ BaaS(后端即服務,持久化或第三方服務)= FaaS + BaaS

    • 基於 Serverless 架構,我們完全可以把傳統的 MVC 架構轉換為 BaaS+View+FaaS 的組合,重構或實現。
  • 廣義 Serverless = 服務端免運維 = 具備 Serverless 特性的雲服務

FaaS 與應用托管 PaaS 平台對比,最大的區別在於資源利用率,這也是 FaaS 最大的創新點。FaaS 的應用實例可以縮容到 0,而應用托管 PaaS 平台則至少要維持 1 台服務器或容器。

FAAS 冷啟動

冷啟動本來是 PC 上的概念,它是指關閉電源后,PC 再啟動仍然需要重新加載 BIOS 表,也就是從硬件驅動開始啟動,因此啟動速度很慢。

FaaS 中的冷啟動是指從調用函數開始到函數實例准備完成的整個過程。 冷啟動我們關注的是啟動時間,啟動時間越短,我們對資源的利用率就越高。現在的雲服務商,基於不同的語言特性,冷啟動平均耗時基本在 100~700 毫秒之間。得益於 Google 的 JavaScript 引擎 Just In Time 特性,Node.js 在冷啟動方面速度是最快的。

請求第一次訪問時,雲服務商就可以利用構建好的緩存鏡像,直接跳過冷啟動的下載函數代碼步驟,從鏡像啟動容器,這個也叫預熱冷啟動。所以如果我們有些業務場景對響應時間比較敏感,我們就可以通過預熱冷啟動或預留實例策略,加速或繞過冷啟動時間。

FAAS 分層

  1. 容器
  2. 運行時runtime
  3. 具體函數代碼

雲服務商負責的就是容器和 Runtime 的准備階段了。而開發者自己負責的則是函數執行階段。一旦容器 &Runtime 啟動后,就會維持一段時間,這段時間內的這個函數實例就可以直接處理用戶數據請求。當一段時間內沒有用戶請求事件發生(各個雲服務商維持實例的時間和策略不同),則會銷毀這個函數實例。

FAAS 進程模型

  • 用完即毀型:函數實例准備好后,執行完函數就直接結束。這是 FaaS 最純正的用法。
  • 常駐進程型:函數實例准備好后,執行完函數不結束,而是返回繼續等待下一次函數被調用。這里需要注意,即使 FaaS 是常駐進程型,如果一段時間沒有事件觸發,函數實例還是會被雲服務商銷毀。

SFF(Serverless For Frontend)指前端數據請求過來,函數觸發器觸發我們的函數服務;我們的函數啟動后,調用后端提供的元數據接口,並將返回的元數據加工成前端需要的數據格式;我們的 FaaS 函數完全就可以休息了。

Serverless 示例

百度雲 Serverless 服務 CFC:

選擇 HTTP 觸發器;返回當前系統時間:

➜  ~ curl https://7m2mvhhnp7v6y.cfc-execute.bj.baidubce.com/galvin
Hello World
2020-05-08 02:32:38%

后端應用 BaaS 化

回到我們的進程模型,用完即毀型是天然的 Stateless,因為它執行完就銷毀,你無法單純用它持久化存儲任何值;常駐進程型則是天然的 Stateful,因為它的主進程不退出,主進程可以存儲部分值。

BaaS 化的核心思想就是將后端應用轉換成 NoOps 的數據接口,這樣 FaaS 在 SFF 層就可以放開手腳,而不用再考慮冷啟動時間了。

AWS 提供的 DynamoDB 服務或 Aurora 服務。數據庫就是 BaaS 化的,我們無需關心服務端運維,也無需關心 IP,我們只要通過域名和密鑰訪問我們的 DB,就像使用數據編排一樣

總結

  • 擴縮容我們可以選擇縱向擴縮容和橫向擴縮容,縱向擴縮容就是提升單機性能,價格上升曲線陡峭,我們通常要慎重選擇;橫向擴縮容就是提升機器數量,價格上升平穩,也是我們常用的默認擴縮容方式。
  • 在網絡拓撲圖中,Stateful 是存數據的節點;Stateless 是處理數據的節點,不負責保存數據。只有 Stateless 節點才能任意擴縮容,Stateful 節點因為是保存我們的重要數據,所以我們要謹慎對待。如果我們的網絡拓撲節點想自由擴縮容,則需要將這個節點的數據操作外移到專門的 Stateful 節點。
  • 我們的 FaaS 訪問 Stateful 節點,那我們就希望 Stateful 節點對 FaaS 提供數據接口,而不是單純的數據庫指令,因為數據庫連接會增加 FaaS 的額外開支。另外為了方便后端工程師開發,我們需要將 Stateful 節點 BaaS 化,BaaS 化的內容,我們將在后續的課程中展開。

A Berkeley View onServerless Computing
https://www2.eecs.berkeley.edu/Pubs/TechRpts/2019/EECS-2019-3.pdf


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM