本文整理自 ServerlessDay · China 大會 - 《從零到一,Serverless 平臺在滴滴內部落地》分享,講師滴滴彈性云平臺負責人張健、滴滴資深前端開發工程師陳嵌訓,滴滴 Serverless FT成員來自:滴滴基礎平臺部、車服技術部、金融事業部、貧訓產品技術部,
為什么(前端)要推動建設 Serverless
- 更快地創建一個服務且免運維:大量的 Node.js 服務,創建服務,需要申請節點、申請機器,對接構建、部署、日志、監控,還要持續運維服,我們希望能更快創建一個服務并且免運維,
- 更靈活的隔離能力:前端 BFF 介面聚合、微前端等業務場景,需要創建大量的介面服務,快速創建服務的同時,還希望可以以不同粒度靈活進行介面間的隔離,
- 更低的成本:大量低峰期時間cpu/記憶體利用率很低,服務不再使用了,資源卻仍然占用,

我們的方案
我們調研了業界的 Serverless 方案,最終決定了自己的方案: K8s + Knative + Istio 搭建應用級 Serverless,他的優勢是:
- 社區相對繁榮,未來充滿希望,
- 應用級 Serverless, 和傳統通過 Docker 鏡像開發,部署相近,現有服務遷移成本低,
- 應用級 Serverless, 通過 Serverless, 路由,可以靈活控制隔離的粒度,

通過 Serverless 升級研發模式
那有了 Severless 基礎能力,如何通過他來升級我們的研發模式呢?
- 我們提供 npm 包打通公司的基礎能力,包括資料存盤相關、通信相關
- 上層封裝層 各種框架的中間件
- 再上層是面向業務領域的框架,express/koa/以及我們基于egg打造的degg框架,他一定程度上方便了從零到一創建一個公司內部標準的服務,
現在我們稱之為面向 Serverless 的高級模式,業務同學可以更專注于業務編碼,簡單、高效完成這么一個日常開發迭代的流程

Serverless 全域圖 - 研發視角
從研發視角看下,整個 Serverless的全域,自上而下是:
- 業務場景解決方案 ,基于 Serverless 平臺,在Serverless-cli 插件規范下的場景解決方案
- Serverless -cli 和 Vscode 插件,作為面向開發者的統一入口
- 面向業務的研發層,開發IDE, 包括本地的、云端的
- 兩層網關,業務層網關到 Istio 打造的Serverless網關
- Bass SDK,用來與后臺基礎能力通信
- 運行在集群里的應用,包含三類
- 右側是Appication是傳統服務
- 左下是Runtime, Application, 他是將日常業務場景進行抽象,將不變的沉淀到Runtime里,
- 業務工程里只有變的東西,云函式情況下就可以是上面這個Funciton
- Nodejs 框架
- 底層集群, K8s /Knative 集群
右側: 是業務服務環境,下面是常規的日志、監控、報警、性能分析的能力
左下側:是Nodejs生態體系,包括業務框架、SDK、Nodejs性能分析平臺
左上側:是面向Serverless 研發體系的共享市場
在虛線框里,就是面向一個業務場景,基于 Serverless 能力打造的一個通用解決方案,

Serverless 流程圖 - 研發視角
將上面 Serverless 全域圖拆分,我們把它分成三部分,這三部分也是我們年初立項,多個團隊合作做這件事的一個模塊分工,分為底層、平臺層,和面向業務的研發層,
在開發者使用程序中,他們的流程是這樣的:
- 上層不同場景的工程,使用統一的cli, 也可以通過Vscode插件可視化來完成整個開發流程,Vscode也呼叫cli能力
- 然后由cli呼叫平臺的能力,再由平臺進行權限驗證,呼叫下層通用構建、部署能力
- 最后呼叫Serverless底層介面,將服務部署到KNative+K8s集群上

Serverless-cli 的定位
我們再來看下 Serverless-cli, 它的定位是,基于插件式命令列擴展框架,他包含如下3個核心能力:
- 與Serverless平臺聯動,完成服務構建、部署等操作
- 提供規范,靈活的命令擴展能力
- 打造開發者生態,場景方案共享,并保持開發體驗的一致性

serverless-cli 的設計
cli 設計包含核心模塊、默認命令、webpack相關、配置規范、以及基于cli 框架上層打造的插件生態,

場景方案
場景方案 - FaaS(云函式)
第一個場景方案:云函式,
函式即服務,用戶快速撰寫一個函式介面,這里創建了兩個介面, 每個介面暴露一個函式,入參為param 和 context, 通過 async 回傳函式同步異步結果,這個場景的插件為 @didi/sls-cli-plugin-faas, 用戶通過 package.json 中宣告依賴即可, FaaS工程型別的優勢,是簡單高效,并且通過Serverless 路由可以靈活控制隔離粒度,


場景方案 - Sma(微應用)
第二個場景方案:微應用,
頁面即服務,前后端代碼一體化,service.js 里保留出兩個介面 list 和 add, 此時可以在前端組件中,類似遠程呼叫,直接呼叫這兩個方法,如同本地函式一樣,另外它的服務端代碼背景關系和 FaaS 保持一致,

場景方案 - Sma-light(微應用-輕量版)
因為是應用級Severless方案,服務部署程序還是需要經歷構建代碼、編譯鏡像、以及整個應用級的部署,故我們基于Runtime的設計,結合Nodejs熱更新能力,來支持頁面級發布能力,輕量微應用型別工程,它支持
- 靜態頁面、介面
- 動態頁面、介面
- 頁面模板、中間件等抽象,打造該工程型別的物料生態

不同場景方案,一致開發體驗
我們來感受下,不同場景下一致的開發體驗,包括創建、構建、開發、部署等
執行dev 時會一件啟動前端資源webpack服務,同時啟動服務端runtime服務,打開導航頁面,
另外部署,可以執行 sls deploy, 通過 cli 將服務、按場景先后,按流量分組部署到 Severless 平臺,
也可以通過 Vscode 插件可視化方式進行操作,進行部署、回滾,


云端開發
更進一步,我們提供了云端開發能力,來滿足一些如云函式,這類輕量創建服務的方式,開發者可以通過平臺創建函式、頁面,完成開發、除錯,上線,且它的開發體驗與本地是完全環境一致,并且是復用的,

基于 Serverless 面向業務聚合
我們來看一個業務使用案例,
這是我們貧訓的作業臺,是一個面向運營,集合了多個業務線后臺系統,這里的選單欄是配置集成起來的,每個選單項是一個獨立的頁面,目前我們還沒有采用微前端的一些輕量的隔離方案,使用的是簡單、有效的iframe來進行隔離的,每個頁面即服務,由每個業務線團隊里的每個同學,用他們熟悉的技術堆疊,通過的前面介紹的微應用解決方案,獨立運維,

最后
最后,我們也在積極探索用 V8 Isolate 與我們現有應用級 Serverless + Runtime設計結合,實作面向 nodejs 更輕量高效的 Serverless 隔離方案,
One More Thing
快速體驗騰訊云 Serverless Demo 并領取新手代金券 ?? serverless/try
歡迎訪問:Serverless 中文網!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/73600.html
標籤:其他
上一篇:openslide的安裝問題
