Lumos:移動端混合棧跨端提效實踐
一. 背景:
隨着哈囉出行發展,移動端業務場景越來越豐富,業務需求量逐步增加。如何提升開發效率,節省人力已成爲我們面臨的真實問題。我們思考如何藉助原生端已支持的跨端平臺引擎,來統一移動端業務邏輯開發,消除兩端邏輯差異,保證業務邏輯代碼兩端只寫一次,完成需求開發的提效,縮短問題排查時間。
現狀:
例如消息平臺的端內 Push 數據處理邏輯,站內信歷史數據篩選邏輯,支付平臺的支付方式的複雜判斷邏輯,還有用戶平臺的登錄流程,一鍵登錄等處理兩端邏輯大部分都是重複的,以及業務側新需求,很多都是相同邏輯兩端分別開發或同時修改原有業務邏輯,兩端技術棧上的實現需要 2 倍的人力成本,兩套實現邏輯對應的出錯概率也會相應增加。
_上述的數據處理邏輯,篩選邏輯以及判斷邏輯等業務邏輯爲交互上的狀態更新,邏輯流轉等。數據聚合等還是儘量由服務端或者 BFF 層來處理。_BFF 在 B 端的實踐就是主要處理不同域之間的數據聚合,保證給到的 model 是面向 UI 的。
總結:
-
相同業務場景,業務邏輯兩端分別實現。邏輯開發對應人力 *2;
-
方案設計環節可能缺失。由於信息不對稱等因素,不合理的設計可能導致健壯性,擴展性,複用性等打折扣;
-
兩端的業務邏輯細節實現方式不一致;
-
不規範的代碼設計導致業務邏輯跟頁面強耦合。
Lumos 混合棧提效方案:
結合目前團隊內的跨端語言使用情況以及 CI 等基礎建設,我們使用 Dart 來完成業務邏輯的跨平臺建設。通過混合棧框架實現:
-
相同的業務場景,業務邏輯兩端只實現一份。邏輯開發對應人力 *1;
-
統一業務邏輯開發的前提是 合理一致的方案設計,反向保證方案設計環節;
-
統一兩端業務邏輯細節的實現方式,爲後續問題排查提升效率;
-
實現業務邏輯剝離,減少頁面與邏輯的耦合。
(Lumos 原爲《哈利波特》中的照明咒—熒光閃爍,寓意更開闊明朗的未來)
二. 方案設計
- 架構圖 - 業務視角:
-
業務 UI:業務需求開發只需要專注於兩端的 UI 開發;
-
Lumos 業務邏輯:提供統一的對外通信協議,保證可擴展的情況下,規定了通信數據格式以及通信方式。內部藉助跨平臺引擎完成統一的業務邏輯處理,同時提供可擴展的通用業務能力;
-
支撐工具:複用已有基礎建設完成快速開發,CI 集成;
-
監控平臺:Lumos 在線上運行時,通過性能監控平臺來獲取運行狀況,日誌平臺和埋點信息發現問題並及時響應。
- 時序圖:
Native 調用 Flutter 流程
Flutter 調用 Native 流程 (複用已有原生能力)
- 性能監控和異常捕獲:
監控指標:
-
方法調用效率:針對 API 入口做調用效率的監控,抽樣上傳。根據實際性能數據完成分析對比;
-
數據傳遞,回傳效率 :針對不同數據量級做分層評估模型(參考維度:數據層級深度,數據屬性個數,數據長度 3 個維度加權計算)統計數據傳遞,回傳時間;
-
內存,CPU 佔用:複用 FlutterAPM 能力,監控線上 Lumos 引起的內存,CPU 佔用變化情況;
-
異常捕獲:複用 FlutterAPM 能力,完成異常捕獲和上報,確保及時響應和排查問題。
-
通信協議:
協議規定:
action moduleName methodName (Lumos定義)
__|__ __|__ ____|____
/ \ / \ / \
action:/login/getUserName/
參數描述:
三. 實踐
針對業務邏輯迭代頻繁的模塊,例如用戶平臺,支付平臺,使用 Lumos 邏輯邏輯跨平臺容器可以大大提升迭代速度,配合容器配置化平臺方案,可以將業務驗證成本最小化。實現業務穩定的前提下,快速迭代試錯。
- 業務場景技術架構:
-
提效容器輸入:Dart 文本,參數,回調,錯誤處理,數據模型;
-
通信協議:負責規定原生與 Dart 之間的通信,數據傳遞的協議;
-
通用能力:一些常用場景,功能的 Dart 封裝,例如網絡請求,數據轉換,定時器等;
-
提效容器能力:解析執行,中間態管理,模型轉換,回調處理;
-
通信實現方式:通過 MethodChannel 未完成跨端通信;
-
FlutterEngine: 基於目前 C 端, B 端單引擎模式,Lumos 將複用 UIEngine,減少資源佔用;利用已有的 CI,向日葵等集成流程,降低工程化成本。
- 混合棧實現一次業務邏輯開發
場景一:基於目前訂單中心的業務迭代頻率與迭代內容以及業務風險把控,我們首選這裏做 AB 接入。訂單中心頁面數據由配置中心下發,不同類型的訂單對應不同 type。這裏就涉及數據下發,數據匹配和數據篩選。整套數據處理由於兩端統一的 type 類型約定,所以邏輯上是一致的。這裏在統一定義好數據返回格式後,在 Dart 側完成一次業務邏輯開發即可。
簡化流程圖:
場景二:支付組件涉及頁面較簡單 - 支付收銀臺,待支付收銀臺,但是對於不同星級用戶以及不同場景環境,支付選項是多種多樣的。
目前的痛點是:支付平臺業務需求迭代頻繁,90% 以上的迭代內容爲支付流程優化,邏輯修改或新增類型。配置化程度低,且 iOS,Android 兩端修改,耗時耗力。
在對高可用高穩定追求更高的支付業務,結合支付後續業務規劃,Lumos 可以用來承載抽象出的業務規則和業務邏輯。配合配置平臺,支付平臺的需求迭代可以又穩又快的轉起來。
- 提效數據統計:
- 案例一:[交易平臺][訂單中心改造]
開發資源:iOS,Android 每端各需 3 人日,共計 6 人日
開發比例:全部爲邏輯開發
使用 Lumos 節省:3 人日
- 案例二:[消息平臺][IM 消息推送]
開發資源:iOS,Android 每端各需 8 人日,共計 16 人日
開發比例:邏輯開發量: UI 開發量爲 1:3
使用 Lumos 節省:6 人日
例如一個 iOS,Android 每端各需 6 人日,共計 12 人日的業務需求:
如果將聯調,測試,埋點,驗證環節計算入內,提效數據效果會更明顯。
-
聯調只需針對 Dart 業務邏輯完成聯調即可
-
針對業務邏輯的埋點,兩端只需完成一次
-
測試,產品驗收只需對一段做業務邏輯完整迴歸,另一端可快速驗證頁面即可
四. 未來與展望
未來的規劃中,Lumos 的使用場景不只侷限於業務邏輯的開發提效。業務所處領域的數據,流程,規則等是可以通過 Lumos 統一集中在一起,通過狀態集中管理來更新,監聽,並維護我們的應用。使用 Lumos 來黑盒管理業務模型,僅對業務邏輯做必要的參數輸入,而不去關心狀態的流轉,這樣可以更專注於業務邏輯的開發。
這種基於狀態模式的主要優點在於封裝了轉換規則,並枚舉可能的狀態,它將所有與某個狀態有關的行爲放到一個類中,並且可以方便地增加新的狀態,只需要改變對象狀態即可改變對象的行爲。 同時拋開所有展示層,這一層也可以不依賴於展示層而獨立運行。
終極模式,我們希望藉助 Lumos 託管業務模型層,負責統一方案設計後的領域數據流轉和業務流程,業務規則的整合,使 App 層次更清晰合理,保證迭代速度和質量的大前提下,靈活有序的對接各個平臺。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/u6uYoFJLKmjdHoeSgr5cBg