《Laf 云開發平台及其實現原理》原文
平台工程線下 Meetup 北京站 2023-09-13
Laf 是我非常喜歡的雲平台,這裡有一個他們的線下分享,這裡簡單做個介紹。
產品介紹#
忽略
產品演示#
略
產品特點總結#
開箱即用的應用資源,包括提供計算資源、數據庫資源、日誌網絡存儲等應用所需要的一切資源,不需要準備任何環境,包括電腦環境和物理環境。
目標是盡可能縮短開發流程,降低開發門檻。如果一個應用部署一個環境需要一天,我們可能一天已經做一個 demo 出來,已經上線發給用戶或群友測試了。
開源開放的態度,Laf 所有的源代碼是開源的,我們用的組件也都是開源的,不包含任何廠商綁定,可以跑在任何雲上,沒有後顧之憂。
技術實現介紹#
技術選型#
- node 編程語言
- 存儲選擇 minIO,開源和橫向拓展能力
- 數據庫選擇 mongo
- 網關 apisix,無縫修改動態路由、豐富的插件、開源開放
開發者使用流程#
- ide 或者 cli 開發
- 創建應用,連接到 laf server
- 通過 k8s 創建一個應用實例,放 node runtime
- 分配數據庫、存儲
- 應用創建、啟動
用戶流量流程#
- 調用雲函數、調用接口
- 流量到網關,網關找到 appID 找到 runtime
- 確定函數名稱,執行,響應返回
serverless 實現方案比較
- 一種方案是每次請求啟動一個 pod,進行處理,每次都是全新的環境,擴縮容比較簡單,冷啟動比較麻煩,而且不支持長連接
- laf 選擇的是長連接內存方案,沒有冷啟動,容器始終運行,天然支持長連接,擴縮容通過 k8s 的 hpa 實現,擴縮容的技術實現會複雜
還有一些細節,沒做過理解不了,就不提了。
開發者角度#
- 編寫雲函數,會編譯成 js,存儲數據庫、發布到 runtime
- 調用 node vm 模塊,處理成 script 對象,緩存到內存,調用雲函數從內存裡獲取 vm 的 script 對象並執行
- 沒有編譯的過程
- http 調用時從內存裡獲取編譯後的結果,處理上下文,並執行代碼
- 雲函數直接調用,在 require 時候會識別是否雲函數,處理為 node_module
對象存儲部分#
通過 MinIO 存儲 bucket,配合訪問策略,實現多租戶隔離
數據庫部分#
mongo 本身有用戶管理機制,創建 user 權限隔離。
如果流量突發,會不會影響平台?對 mongodb 的流量拆包,判斷請求頻率限制,可以丟棄,也可以數據庫計量計費。
網關部分#
利用 apifix,處理動態路由。
雲函數、應用、存儲 bucket 都通過他分配二級域名。
laf pilot#
主要是通過 ai 分析問題,理解文檔知識點,從而寫出代碼。
- 業務代碼實現
- 文檔使用問題
- 其他問題
其他為實現能力展望#
介紹 sealos 實現雲資源調用。
其他忽略。
🏠 官網鏈接
https://laf.run
🐙GitHub 地址
https://github.com/labring/laf
📑 訪問 Laf 文檔
https://doc.laf.run/guide/
🏘️ 逛逛論壇
https://forum.laf.run/
個人感受#
比較系統介紹了 laf 基本能力,個人是用戶了,所以很多知識點理解起來比較容易。