多語言支援、事件驅動的全託管Serverless函式計算服務平臺 — iPaaS·EasyFunction

語言: CN / TW / HK

寫在前面

Serverless是目前比較熱門的技術話題,各大雲平臺以及網際網路大廠內部都在積極建設Serverless產品。本文將介紹iPaaS(京東前端一體化搭建平臺)體系下的 Serverless FaaS產品EasyFunction平臺的功能和落地情況,具體分為兩個部分,第一部分通過介紹FaaS適用的場景、可帶來的收益來說明我們為什麼要做EasyFunction以及它可以給我們帶來哪些收益,第二部分通過EasyFunction的產品功能、典型落地案例的介紹來深入瞭解EasyFunction。通過閱讀希望可以給大家帶來一些啟發和幫助。

近些年Serverless技術迅速發展,國內各大網際網路公司都在積極建設Serverless相關產品,探索Serverless技術的落地,國內阿里雲、騰訊雲等都有相應商業化的產品。在這種大的背景下,通天塔團隊結合自身的需求和支撐IPaaS技術開放體系需要,在去年9月份經過調研後,開始了Serverless FaaS平臺的建設,內部專案名稱為EasyFunction。用一句話概括EasyFunction即一種基於 Java、NodeJs、Go等多語言功能函式即服務 (FaaS) 的程式設計平臺,幫助使用者脫離繁冗的開發配置、申請機器資源等運維工作,開發者只需要關注業務程式碼邏輯的編寫實現。目前我們處於快速驗證,落地MVP版本階段,我們通過技術選型、產品與架構設計、開發迭代,已經快速落地了Serverless FaaS產品的基本的能力,如構建、釋出、彈性伸縮、對接觸發源、執行函式等。目前正在推進了一些業務的試點接入,幫助驗證打磨產品。

適用場景

0 1

BFF(Backend For Front)場景

BFF層,主要職責把相對底層的領域物件資料通過聚合、裁剪轉換成前端檢視層的資料,這裡的檢視層資料會因端上的場景和裝置而異,經常要做一些個性化處理。而對於檢視層資料模型前端開發最為清楚和熟悉,知道需要什麼樣的資料來渲染頁面。在傳統的開發模式中會導致後端相似功能的聚合介面林立,而且大部分介面生命週期都很短(業務試錯原因),開發階段前後端溝通成本、後期維護成本、機器資源成本都比較大。而使用FaaS支援多種語言的函式開發,降低開發門檻,開發者在編寫函式時只需關注業務邏輯的實現,就可以完成API編寫、釋出、上線,這樣一來前端同學就可以實現資料層的自管理,減少前後端溝通成本。

0 2

資料處理&定時任務場景

FaaS平臺直接與任務排程系統、JMQ打通,開發者只需關注任務的處理邏輯編寫,然後建立相應型別的函式觸發器,就可以完成定時任務的接入,而不需要管理機器資源,同時可以根據實時流量或者例項CPU負載進行資源的自動伸縮,資源按需使用。

0 3

SSR(服務端渲染)場景

在服務端完成資料和樣式的繫結,返回html資料,這種比較耗後端資源,但好處是頁面可以快速展現,所以這塊可以嘗試在FaaS中寫,尤其前端首屏快速展現場景。

0 4

後臺管理平臺場景

公司內部有很多的後臺管理平臺的Web服務,它們雖然相較於函式是比較重的,但完全可以直接託管Serverless平臺,充分享受Serverless平臺極致的釋出和運維效率。

帶來的業務收益

將傳統應用和FaaS雲函式進行個簡單地對比:

  • "統一" 了業務組間的業務實現方式,業務切換快

  • 消除服務端技術壁壘,可以使用熟悉的技術棧做業務邏輯開發

  • 對使用者 ”無框架“ 概念,使用者只需要瞭解函式的輸入和輸出

  • 從部署、釋出、監控 “一條龍” 式的平臺服務,高效、穩定

不管是在資源利用率還是研發運維效率上,FaaS都給我們帶來了諸多好處。

產品功能

EasyFunction-雲函式底層k8s運維、機器資源編排託管於京東雲,而我們則專注於FaaS產品上層功能的建設,比如閘道器功能建設、一站式平臺開發、函式模板開發等,目前已經快速落地了Serverless FaaS產品的基本的能力,如構建、釋出、彈性伸縮、對接觸發源、執行函式,具體功能如下:

01

函式建立

EasyFunction支援Java8、NodeJs14、Go、Python、PHP、Ruby六種語言的函式建立,其中Java8語言的函式生態最為豐富,集成了集團主流中介軟體(JSF、Ducc、JMQ、ClickHouse、UMP等),其次是NodeJs,如果大家感興趣加入我們一起共建函式語言模板,豐富函式生態。

開發者選擇好語言完成建立函式,下載對應函式模板程式碼,上傳到Coding,在函式基本配置資訊中配置函式倉庫地址、選擇函式例項CPU、記憶體配置、配置環境變數即完成函式建立。

02

版本&路由

在完成函式建立後,進入函式程式碼編寫、測試、釋出版本階段。具體語言的函式程式碼編寫指南參照開發手冊文件同時在開發工具上EasyFunction集成了CloudIDE,輕鬆實現WEB端編碼。我們也提供了線上函式測試功能。

經過部署、測試後,可對當前LATEST版本進行發版,釋出一個新的版本可以理解為為 LATEST 版本的函式程式碼和函式配置(不包括觸發器)建立一個快照副本。針對釋出的版本開發者可以實時檢視日誌、重啟、調整副本例項。

在首次完成版本釋出後,建議開發者建立對應的別名,使用別名訪問服務或函式時,EasyFunction會將別名解析為其指向的版本,呼叫方無需瞭解別名指向的具體版本,同時開發者可自由的調整別名下所管理版本的流量比例。

03

觸發器

觸發器是觸發函式執行的方式。在事件驅動的計算模型中,事件源是事件的生產者,函式是事件的處理者,只有建立了對應的觸發器,外部事件才可以通過觸發器的具體方式訪問到函式。EasyFunction支援HTTP、Color閘道器、JMQ三種類型的觸發器,其中HTTP在公司內網系統間呼叫使用、Color閘道器用於外網事件源觸發函式。

04

自動伸縮

EasyFunction目前支援根據CPU負載和單例項QPS兩種型別的指標觸發伸縮,在高流量場景下單一指標的短暫性抖動會導致伸縮頻繁不穩定的問題,後續我們將基於多負載指標+演算法預測作為觸發伸縮的依據同時增加定時伸縮功能。不過當前的單一指標伸縮在一些流量穩定且有一定規律的場景下預期也是比較好。下圖是線上一個函式的案例函式例項數基本上隨著QPS的增長而伸縮,在凌晨4點時刻由於流量達到最低,例項副本數也降到最低2個。

模擬資料

05

日誌&監控

EasyFunction提供了線上函式日誌檢索和函式一些基本指標的監控。

落地案例

在完成MVP版本的上線後,目前已經推進了一些業務的接入,下面介紹幾個典型案例。

1、水滴cms和EasyFunction結合,幫助開發者快速高效的搭建cms

水滴cms搭建平臺負責頁面的樣式的搭建和資料渲染、FaaS提供cms所需的資料,這個資料開發者可自行通過建立函式、編寫函式來定義,且EasyFunction支援多語言,免運維的特點,降低開發者開發門檻的同時讓開發者只需要關注業務邏輯的實現即可快速釋出一個函式為cms提供自定義的資料。

2、營銷中心資源位介面案例(BFF場景)

提供線上的,以 API 為管理維度的聚合類 API是典型的BFF場景。營銷中心繫統的宗旨之一是打造中心化工作平臺,整合內部垂直平臺能力,所以經常需要編排處理多個外部平臺的介面資料,然後返回符合營銷中心cms前端樣式要求的資料。此種場景下開發者通過在函式中編排已有其他平臺的JSF或者HTTP型別的介面,快速構建釋出函式,而不需要考慮機器資源申請、域名申請等運維問題。

3、通天塔日誌分析函式(資料處理場景)

通天塔核心系統日誌MQ流量會隨著業務請求流量的上升而上升,之前是在後端管理平臺上處理日誌分析的邏輯,經常會遇到流量高峰時日誌處理吞吐量不足進而導致監控大盤顯示延遲的問題,老的辦法只能通過提前預估流量手動擴容後端管理應用的例項來應對。而使用函式來處理,建立JMQ型別的函式觸發器,配置合適的自動伸縮策略就可以很好的解決以上問題。

未來規劃

接下來我們將會從優化核心技術,保障業務穩定性;完善生態,落實收益方向上去推進。實踐方向上我們會針對前面說的4大適用場景上去落地案例,真正做到降本增效。 下一期我們將會詳細介紹EasyFunction底層架構設計和核心技術原理。

作者介紹:

朱志國、汪智群、趙涵、戴文龍等,來自平臺業務研發部-應用業務產品研發部通天塔團隊。