Categories
程式開發

Flutter+Serverless端到端研發架構實踐


背景

Serverless(無服務架構)被譽為下一代云計算,自概念推出以來,因為能帶來研發交付速度提升與成本的降低在業內異常火爆。閒魚客戶端基於Flutter進行架構演進與創新,通過Flutter統一Android和iOS雙端提升研發效能之後,希望通過Flutter+Serverless解決以下問題,從而進一步提升整體研發效率。

  • 各角色間存在大量的協同,導致整體研發效率低。
  • 移動端離業務越來越遠,服務端沒有時間做底層領域沉澱。

研發架構的演進

接下來我們帶著這裡兩個問題回顧前後端研發架構演進的歷史。

Flutter+Serverless端到端研發架構實踐 1

PC互聯網早期沒有還沒有前後端的概念,此階段單個業務需求通常一個開發人員可以完成研發,前端網頁與後端邏輯都寫在一個工程中。隨著業務越來越複雜,原本開發者負責前後端研發已經變得效率低下,此階段隨著移動互聯網的爆發,服務端需要服務與PC、Android、iOS等多種前端。

服務端總是有一個疑問:服務端設計接口時,是應該面向UI,還是應該面向通用服務?一個方案是抽取一部分服務端做BFF(Backend For Frontend服務於前端的後端),作為前後端之間的適配層,核心是解決數據的聚合與編排,重新探索更合理的分層協作模式。

服務端寫BFF帶來新的問題,總是包接口無法提升個人能力。如果BFF由端側同學開發可以解決這個問題,具體技術方案也是接下來我們要思考的問題。

雲端一體化技術方案

Flutter+Serverless端到端研發架構實踐 2

Serverless由BaaS(Backend as a Sevice)與Faas(Function as a Service)兩部分組成。 BaaS主要包括數據庫存儲、消息隊列等能力,針對複雜的需求建議由服務端在BaaS層封裝領域服務供FaaS層使用。作為端側開發,核心關注客戶端與FaaS層的代碼開發。

目前公司FaaS環境已經支持Java、Kotlin、Swift、Dart、Node.js等多種語言與框架,閒魚通過Android(Flutter)、iOS(Flutter)、FaaS(Dart Runtime)都使用Dart達到語言一體,並且實現協議一體與工程一體。

語言一體:Android、iOS、FaaS層使用Dart語言開發,實現三端語言統一,有效屏蔽FaaS層語言學習成本。

協議一體:通過一體化框架屏蔽通信細節,前後端同一份State,減少協議轉換,前端同學調用FaaS服務時,如同調用本地函數一樣簡潔。

工程一體:前後端可以在同一個工程中進行開發,利用Dart特性可以通過Hot Reload機制進行快速開發聯調。

閒魚基於FaaS搭建Dart Runtime環境可參考《Dart編譯技術在服務端的探索和應用》。

下單頁一體化實踐

下面以閒魚下單頁一體化為例,通過頁面渲染與交互兩部分展開一體化實踐過程。

Flutter+Serverless端到端研發架構實踐 3

下單渲染一體化

從上圖左側可以看出,客戶端渲染此頁面需要在端側請求5個接口,處理渲染接口之間的邏輯,把接口返回的Data轉為為ViewModel。經過一體化改造之後,原有在端側的邏輯都移到FaaS層,包括聚合5個領域服務,處理業務邏輯,進行字段映射與頁面編排,端側無任何渲染與業務邏輯,直接獲取返回的ViewModel刷新頁面。以下是雲端一體之後的流程圖。

Flutter+Serverless端到端研發架構實踐 4

下單頁交互操作一體化

從上圖右側可以看出,有4種操作都會改變實付款,原本這些操作處理邏輯都在端側處理,一體化改造之後,端側不存在任何計算邏輯,客戶端每次操作都會請求服務端,有FaaS進行紅包是否過期等數據校驗,再返回頁面數據進行刷新。

一體化研發框架

Flutter+Serverless端到端研發架構實踐 5

Nexus Framework:基於Flutter的一體化移動端UI框架。

Logic Engine:基於Flutter的一體化通信與調度框架。

Nexus Server: 基於Dart Runtime的一體化服務端框架。

代碼示例

下圖為客戶端下單頁初始化的代碼示例

Flutter+Serverless端到端研發架構實踐 6

下圖為FaaS層對客戶端發起的初始化請求的處理

Flutter+Serverless端到端研發架構實踐 7

以上是Flutter+FaaS雙端協議一體的開發示例,雙端都是通過BinderAction進行交互,Action中的State是同一個類型,從而有效屏蔽通信細節,提高研發效率。

收益與效果

下單頁已經上線,回顧整個研發過程,雲端一體研發架構不僅僅只是新的技術方案,價值在於擴展端側工作邊界,帶來生產關係的重塑。

協同效率提升:相比Flutter帶來的雙端一體來說,該三端一體的架構進一步提升了30%整體研發效率。

業務閉環:端側還可以更快速地反饋與響應業務,不斷嘗試,從而搭建起更完善的產品模型,為業務創造更多的價值。

人員成長:端側從只關注用戶體驗的開發資源,轉變為整個業務研發的技術負責人,從只關注端側的局部視角到更專注業務閉環的全局視角。 Faas層調用底層領域服務來完成自己的業務,原來服務端可以更加地去專注領域服務的沉澱。

總結與展望

Flutter+Serverless三端一體研發架構,能夠解決本篇提出的原有研發架構的兩個問題,通過改變端側職能邊界有效減少協同,客戶端可以負責整個業務,服務端有更多的時間進行領域沉澱,但是閒魚實踐Flutter+Serverless三端一體研發架構時也遇到以下挑戰:

  • FaaS層研發體驗需要繼續提升 調試只能通過GAIA日誌查看,目前規劃是把平台日誌抓取到本地,並且提供FaaS代碼遠程調試功能。
  • 運維成本增加 問題定位、請求鏈路、壓測、安全生產的工作轉移,如何摸平與服務的差異。

以上是實踐過程中發現的新的挑戰都已經列入下一階段工作中,後續會持續分享這些挑戰的思考與解決方案。

本文轉載自公眾號閒魚技術(ID:XYtech_Alibaba)。

原文鏈接

https://mp.weixin.qq.com/s/JHqHmb00JEMPSAQbau2FIw