天天看點

Flutter+Serverless 端到端研發架構實踐研發架構的演進雲端一體技術方案下單頁一體化實踐代碼示例Flutter+Serverless一體化收益總結與展望

原文作者:閑魚技術

原文連結:

https://developer.aliyun.com/article/739854?spm=a2c6h.12873581.0.0.120c115eB4QFLZ&groupCode=cloudnative 更多雲原生技術資訊可關注 阿裡巴巴雲原生技術圈 Serverless(無服務架構)被譽為下一代雲計算,自概念推出以來,因為能帶來研發傳遞速度提升與成本的降低在業内異常火爆。閑魚用戶端基于Flutter進行架構演進與創新,通過Flutter統一Android和iOS雙端提升研發效能之後,希望通過Flutter+Serverless解決以下問題,進而進一步提升整體研發效率。

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

研發架構的演進

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

Flutter+Serverless 端到端研發架構實踐研發架構的演進雲端一體技術方案下單頁一體化實踐代碼示例Flutter+Serverless一體化收益總結與展望

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

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

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

雲端一體技術方案

Flutter+Serverless 端到端研發架構實踐研發架構的演進雲端一體技術方案下單頁一體化實踐代碼示例Flutter+Serverless一體化收益總結與展望

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 端到端研發架構實踐研發架構的演進雲端一體技術方案下單頁一體化實踐代碼示例Flutter+Serverless一體化收益總結與展望
  • 下單渲染一體化

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

Flutter+Serverless 端到端研發架構實踐研發架構的演進雲端一體技術方案下單頁一體化實踐代碼示例Flutter+Serverless一體化收益總結與展望
  • 下單頁互動操作一體化

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

Flutter+Serverless 端到端研發架構實踐研發架構的演進雲端一體技術方案下單頁一體化實踐代碼示例Flutter+Serverless一體化收益總結與展望

Nexus Framework:基于Flutter的一體化移動端UI架構。

Logic Engine:基于Flutter的一體化通信與排程架構。

Nexus Server: 基于Dart Runtime的一體化服務端架構。

代碼示例

以下用戶端下單頁初始化的代碼示例

Flutter+Serverless 端到端研發架構實踐研發架構的演進雲端一體技術方案下單頁一體化實踐代碼示例Flutter+Serverless一體化收益總結與展望

以下是FaaS層對用戶端發起的初始化請求的處理

Flutter+Serverless 端到端研發架構實踐研發架構的演進雲端一體技術方案下單頁一體化實踐代碼示例Flutter+Serverless一體化收益總結與展望

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

Flutter+Serverless一體化收益

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

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

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

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

總結與展望

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

  1. FaaS層研發體驗需要繼續提升

    調試隻能通過GAIA日志檢視,目前規劃是把平台日志抓取到本地,并且提供FaaS代碼遠端調試功能。

  2. 運維成本增加

    問題定位、請求鍊路、壓測、安全生産的工作轉移,如何摸平與服務的差異。

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

阿裡巴巴雲原生 關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的技術圈。”

繼續閱讀