多語言支持、事件驅動的全托管Serverless函數(shù)計算服務平臺 — iPaaS·EasyFunction
作者 | 朱志國、汪智群、趙涵、戴文龍等,來自平臺業(yè)務研發(fā)部-應用業(yè)務產品研發(fā)部通天塔團隊。
?寫在前面
Serverless是目前比較熱門的技術話題,各大云平臺以及互聯(lián)網(wǎng)大廠內部都在積極建設Serverless產品。本文將介紹iPaaS(京東前端一體化搭建平臺)體系下的 Serverless FaaS產品EasyFunction平臺的功能和落地情況,具體分為兩個部分,第一部分通過介紹FaaS適用的場景、可帶來的收益來說明我們?yōu)槭裁匆鯡asyFunction以及它可以給我們帶來哪些收益,第二部分通過EasyFunction的產品功能、典型落地案例的介紹來深入了解EasyFunction。通過閱讀希望可以給大家?guī)硪恍﹩l(fā)和幫助。
背景
近些年Serverless技術迅速發(fā)展,國內各大互聯(lián)網(wǎng)公司都在積極建設Serverless相關產品,探索Serverless技術的落地,國內阿里云、騰訊云等都有相應商業(yè)化的產品。在這種大的背景下,通天塔團隊結合自身的需求和支撐IPaaS技術開放體系需要,在去年9月份經過調研后,開始了Serverless FaaS平臺的建設,內部項目名稱為EasyFunction。用一句話概括EasyFunction即一種基于 Java、NodeJs、Go等多語言功能函數(shù)即服務 (FaaS) 的編程平臺,幫助用戶脫離繁冗的開發(fā)配置、申請機器資源等運維工作,開發(fā)者只需要關注業(yè)務代碼邏輯的編寫實現(xiàn)。目前我們處于快速驗證,落地MVP版本階段,我們通過技術選型、產品與架構設計、開發(fā)迭代,已經快速落地了Serverless FaaS產品的基本的能力,如構建、發(fā)布、彈性伸縮、對接觸發(fā)源、執(zhí)行函數(shù)等。目前正在推進了一些業(yè)務的試點接入,幫助驗證打磨產品。
適用場景
01BFF(Backend For Front)場景
BFF層,主要職責把相對底層的領域對象數(shù)據(jù)通過聚合、裁剪轉換成前端視圖層的數(shù)據(jù),這里的視圖層數(shù)據(jù)會因端上的場景和設備而異,經常要做一些個性化處理。而對于視圖層數(shù)據(jù)模型前端開發(fā)最為清楚和熟悉,知道需要什么樣的數(shù)據(jù)來渲染頁面。在傳統(tǒng)的開發(fā)模式中會導致后端相似功能的聚合接口林立,而且大部分接口生命周期都很短(業(yè)務試錯原因),開發(fā)階段前后端溝通成本、后期維護成本、機器資源成本都比較大。而使用FaaS支持多種語言的函數(shù)開發(fā),降低開發(fā)門檻,開發(fā)者在編寫函數(shù)時只需關注業(yè)務邏輯的實現(xiàn),就可以完成API編寫、發(fā)布、上線,這樣一來前端同學就可以實現(xiàn)數(shù)據(jù)層的自管理,減少前后端溝通成本。
02數(shù)據(jù)處理&定時任務場景
FaaS平臺直接與任務調度系統(tǒng)、JMQ打通,開發(fā)者只需關注任務的處理邏輯編寫,然后創(chuàng)建相應類型的函數(shù)觸發(fā)器,就可以完成定時任務的接入,而不需要管理機器資源,同時可以根據(jù)實時流量或者實例CPU負載進行資源的自動伸縮,資源按需使用。
03SSR(服務端渲染)場景
在服務端完成數(shù)據(jù)和樣式的綁定,返回html數(shù)據(jù),這種比較耗后端資源,但好處是頁面可以快速展現(xiàn),所以這塊可以嘗試在FaaS中寫,尤其前端首屏快速展現(xiàn)場景。
04后臺管理平臺場景
公司內部有很多的后臺管理平臺的Web服務,它們雖然相較于函數(shù)是比較重的,但完全可以直接托管Serverless平臺,充分享受Serverless平臺極致的發(fā)布和運維效率。
帶來的業(yè)務收益
將傳統(tǒng)應用和FaaS云函數(shù)進行個簡單地對比:
- "統(tǒng)一" 了業(yè)務組間的業(yè)務實現(xiàn)方式,業(yè)務切換快
- 消除服務端技術壁壘,可以使用熟悉的技術棧做業(yè)務邏輯開發(fā)
- 對用戶 ”無框架“ 概念,用戶只需要了解函數(shù)的輸入和輸出
- 從部署、發(fā)布、監(jiān)控 “一條龍” 式的平臺服務,高效、穩(wěn)定
不管是在資源利用率還是研發(fā)運維效率上,F(xiàn)aaS都給我們帶來了諸多好處。
產品功能
EasyFunction-云函數(shù)底層k8s運維、機器資源編排托管于京東云,而我們則專注于FaaS產品上層功能的建設,比如網(wǎng)關功能建設、一站式平臺開發(fā)、函數(shù)模板開發(fā)等,目前已經快速落地了Serverless FaaS產品的基本的能力,如構建、發(fā)布、彈性伸縮、對接觸發(fā)源、執(zhí)行函數(shù),具體功能如下:
01函數(shù)創(chuàng)建
EasyFunction支持Java8、NodeJs14、Go、Python、PHP、Ruby六種語言的函數(shù)創(chuàng)建,其中Java8語言的函數(shù)生態(tài)最為豐富,集成了集團主流中間件(JSF、Ducc、JMQ、ClickHouse、UMP等),其次是NodeJs,如果大家感興趣加入我們一起共建函數(shù)語言模板,豐富函數(shù)生態(tài)。
開發(fā)者選擇好語言完成創(chuàng)建函數(shù),下載對應函數(shù)模板代碼,上傳到Coding,在函數(shù)基本配置信息中配置函數(shù)倉庫地址、選擇函數(shù)實例CPU、內存配置、配置環(huán)境變量即完成函數(shù)創(chuàng)建。
02版本&路由
在完成函數(shù)創(chuàng)建后,進入函數(shù)代碼編寫、測試、發(fā)布版本階段。具體語言的函數(shù)代碼編寫指南參照開發(fā)手冊文檔同時在開發(fā)工具上EasyFunction集成了CloudIDE,輕松實現(xiàn)WEB端編碼。我們也提供了在線函數(shù)測試功能。
經過部署、測試后,可對當前LATEST版本進行發(fā)版,發(fā)布一個新的版本可以理解為為 LATEST 版本的函數(shù)代碼和函數(shù)配置(不包括觸發(fā)器)創(chuàng)建一個快照副本。針對發(fā)布的版本開發(fā)者可以實時查看日志、重啟、調整副本實例。
在首次完成版本發(fā)布后,建議開發(fā)者創(chuàng)建對應的別名,使用別名訪問服務或函數(shù)時,EasyFunction會將別名解析為其指向的版本,調用方無需了解別名指向的具體版本,同時開發(fā)者可自由的調整別名下所管理版本的流量比例。
03觸發(fā)器
觸發(fā)器是觸發(fā)函數(shù)執(zhí)行的方式。在事件驅動的計算模型中,事件源是事件的生產者,函數(shù)是事件的處理者,只有創(chuàng)建了對應的觸發(fā)器,外部事件才可以通過觸發(fā)器的具體方式訪問到函數(shù)。EasyFunction支持HTTP、Color網(wǎng)關、JMQ三種類型的觸發(fā)器,其中HTTP在公司內網(wǎng)系統(tǒng)間調用使用、Color網(wǎng)關用于外網(wǎng)事件源觸發(fā)函數(shù)。
04自動伸縮
EasyFunction目前支持根據(jù)CPU負載和單實例QPS兩種類型的指標觸發(fā)伸縮,在高流量場景下單一指標的短暫性抖動會導致伸縮頻繁不穩(wěn)定的問題,后續(xù)我們將基于多負載指標+算法預測作為觸發(fā)伸縮的依據(jù)同時增加定時伸縮功能。不過當前的單一指標伸縮在一些流量穩(wěn)定且有一定規(guī)律的場景下預期也是比較好。下圖是線上一個函數(shù)的案例函數(shù)實例數(shù)基本上隨著QPS的增長而伸縮,在凌晨4點時刻由于流量達到最低,實例副本數(shù)也降到最低2個。
模擬數(shù)據(jù)
05日志&監(jiān)控
EasyFunction提供了在線函數(shù)日志檢索和函數(shù)一些基本指標的監(jiān)控。
落地案例
在完成MVP版本的上線后,目前已經推進了一些業(yè)務的接入,下面介紹幾個典型案例。
1、水滴cms和EasyFunction結合,幫助開發(fā)者快速高效的搭建cms
水滴cms搭建平臺負責頁面的樣式的搭建和數(shù)據(jù)渲染、FaaS提供cms所需的數(shù)據(jù),這個數(shù)據(jù)開發(fā)者可自行通過創(chuàng)建函數(shù)、編寫函數(shù)來定義,且EasyFunction支持多語言,免運維的特點,降低開發(fā)者開發(fā)門檻的同時讓開發(fā)者只需要關注業(yè)務邏輯的實現(xiàn)即可快速發(fā)布一個函數(shù)為cms提供自定義的數(shù)據(jù)。
2、營銷中心資源位接口案例(BFF場景)
提供在線的,以 API 為管理維度的聚合類 API是典型的BFF場景。營銷中心系統(tǒng)的宗旨之一是打造中心化工作平臺,整合內部垂直平臺能力,所以經常需要編排處理多個外部平臺的接口數(shù)據(jù),然后返回符合營銷中心cms前端樣式要求的數(shù)據(jù)。此種場景下開發(fā)者通過在函數(shù)中編排已有其他平臺的JSF或者HTTP類型的接口,快速構建發(fā)布函數(shù),而不需要考慮機器資源申請、域名申請等運維問題。
3、通天塔日志分析函數(shù)(數(shù)據(jù)處理場景)
通天塔核心系統(tǒng)日志MQ流量會隨著業(yè)務請求流量的上升而上升,之前是在后端管理平臺上處理日志分析的邏輯,經常會遇到流量高峰時日志處理吞吐量不足進而導致監(jiān)控大盤顯示延遲的問題,老的辦法只能通過提前預估流量手動擴容后端管理應用的實例來應對。而使用函數(shù)來處理,創(chuàng)建JMQ類型的函數(shù)觸發(fā)器,配置合適的自動伸縮策略就可以很好的解決以上問題。
未來規(guī)劃
接下來我們將會從優(yōu)化核心技術,保障業(yè)務穩(wěn)定性;完善生態(tài),落實收益方向上去推進。實踐方向上我們會針對前面說的4大適用場景上去落地案例,真正做到降本增效。下一期我們將會詳細介紹EasyFunction底層架構設計和核心技術原理。