Flutter+Serverless端到端研发架构实践
Serverless(無服務(wù)架構(gòu))被譽(yù)為下一代云計(jì)算,自概念推出以來,因?yàn)槟軒硌邪l(fā)交付速度提升與成本的降低在業(yè)內(nèi)異?;鸨ie魚客戶端基于Flutter進(jìn)行架構(gòu)演進(jìn)與創(chuàng)新,通過Flutter統(tǒng)一Android和iOS雙端提升研發(fā)效能之后,希望通過Flutter+Serverless解決以下問題,從而進(jìn)一步提升整體研發(fā)效率。
研發(fā)架構(gòu)的演進(jìn)
接下來我們帶著這里兩個(gè)問題回顧前后端研發(fā)架構(gòu)演進(jìn)的歷史。
PC互聯(lián)網(wǎng)早期沒有還沒有前后端的概念,此階段單個(gè)業(yè)務(wù)需求通常一個(gè)開發(fā)人員可以完成研發(fā),前端網(wǎng)頁與后端邏輯都寫在一個(gè)工程中。隨著業(yè)務(wù)越來越復(fù)雜,原本開發(fā)者負(fù)責(zé)前后端研發(fā)已經(jīng)變得效率低下,此階段隨著移動互聯(lián)網(wǎng)的爆發(fā),服務(wù)端需要服務(wù)與PC、Android、iOS等多種前端。
服務(wù)端總是有一個(gè)疑問:服務(wù)端設(shè)計(jì)接口時(shí),是應(yīng)該面向UI,還是應(yīng)該面向通用服務(wù)?一個(gè)方案是抽取一部分服務(wù)端做BFF(Backend For Frontend服務(wù)于前端的后端),作為前后端之間的適配層,核心是解決數(shù)據(jù)的聚合與編排,重新探索更合理的分層協(xié)作模式。
服務(wù)端寫B(tài)FF帶來新的問題,總是包接口無法提升個(gè)人能力。如果BFF由端側(cè)同學(xué)開發(fā)可以解決這個(gè)問題,具體技術(shù)方案也是接下來我們要思考的問題。
云端一體技術(shù)方案
Serverless由BaaS(Backend as a Sevice)與Faas(Function as a Service)兩部分組成。BaaS主要包括數(shù)據(jù)庫存儲、消息隊(duì)列等能力,針對復(fù)雜的需求建議由服務(wù)端在BaaS層封裝領(lǐng)域服務(wù)供FaaS層使用。作為端側(cè)開發(fā),核心關(guān)注客戶端與FaaS層的代碼開發(fā)。
目前公司FaaS環(huán)境已經(jīng)支持Java、Kotlin、Swift、Dart、Node.js等多種語言與框架,閑魚通過Android(Flutter)、iOS(Flutter)、FaaS(Dart Runtime)都使用Dart達(dá)到語言一體,并且實(shí)現(xiàn)協(xié)議一體與工程一體。
語言一體:?Android、iOS、FaaS層使用Dart語言開發(fā),實(shí)現(xiàn)三端語言統(tǒng)一,有效屏蔽FaaS層語言學(xué)習(xí)成本。
協(xié)議一體:?通過一體化框架屏蔽通信細(xì)節(jié),前后端同一份State,減少協(xié)議轉(zhuǎn)換,前端同學(xué)調(diào)用FaaS服務(wù)時(shí),如同調(diào)用本地函數(shù)一樣簡潔。
工程一體:?前后端可以在同一個(gè)工程中進(jìn)行開發(fā),利用Dart特性可以通過Hot Reload機(jī)制進(jìn)行快速開發(fā)聯(lián)調(diào)。
閑魚基于FaaS搭建Dart Runtime環(huán)境可參考《Dart編譯技術(shù)在服務(wù)端的探索和應(yīng)用》。
下單頁一體化實(shí)踐
下面以閑魚下單頁一體化為例,通過頁面渲染與交互兩部分展開一體化實(shí)踐過程。
- 下單渲染一體化
從上圖左側(cè)可以看出,客戶端渲染此頁面需要在端側(cè)請求5個(gè)接口,處理渲染接口之間的邏輯,把接口返回的Data轉(zhuǎn)為為ViewModel。經(jīng)過一體化改造之后,原有在端側(cè)的邏輯都移到FaaS層,包括聚合5個(gè)領(lǐng)域服務(wù),處理業(yè)務(wù)邏輯,進(jìn)行字段映射與頁面編排,端側(cè)無任何渲染與業(yè)務(wù)邏輯,直接獲取返回的ViewModel刷新頁面。以下是云端一體之后的流程圖。
- 下單頁交互操作一體化
從上圖右側(cè)可以看出,有4種操作都會改變實(shí)付款,原本這些操作處理邏輯都在端側(cè)處理,一體化改造之后,端側(cè)不存在任何計(jì)算邏輯,客戶端每次操作都會請求服務(wù)端,有FaaS進(jìn)行紅包是否過期等數(shù)據(jù)校驗(yàn),再返回頁面數(shù)據(jù)進(jìn)行刷新。
Nexus Framework:基于Flutter的一體化移動端UI框架。
Logic Engine:基于Flutter的一體化通信與調(diào)度框架。
Nexus Server: 基于Dart Runtime的一體化服務(wù)端框架。
代碼示例
以下客戶端下單頁初始化的代碼示例
以下是FaaS層對客戶端發(fā)起的初始化請求的處理
以上是Flutter+FaaS雙端協(xié)議一體的開發(fā)示例,雙端都是通過BinderAction進(jìn)行交互,Action中的State是同一個(gè)類型,從而有效屏蔽通信細(xì)節(jié),提高研發(fā)效率。
Flutter+Serverless一體化收益
下單頁已經(jīng)上線,回顧整個(gè)研發(fā)過程,云端一體研發(fā)架構(gòu)不僅僅只是新的技術(shù)方案,價(jià)值在于擴(kuò)展端側(cè)工作邊界,帶來生產(chǎn)關(guān)系的重塑。
協(xié)同效率提升:相比Flutter帶來的雙端一體來說,該三端一體的架構(gòu)進(jìn)一步提升了30%整體研發(fā)效率。
業(yè)務(wù)閉環(huán):端側(cè)還可以更快速地反饋與響應(yīng)業(yè)務(wù),不斷嘗試,從而搭建起更完善的產(chǎn)品模型,為業(yè)務(wù)創(chuàng)造更多的價(jià)值。
人員成長:端側(cè)從只關(guān)注用戶體驗(yàn)的開發(fā)資源,轉(zhuǎn)變?yōu)檎麄€(gè)業(yè)務(wù)研發(fā)的技術(shù)負(fù)責(zé)人,從只關(guān)注端側(cè)的局部視角到更專注業(yè)務(wù)閉環(huán)的全局視角。Faas層調(diào)用底層領(lǐng)域服務(wù)來完成自己的業(yè)務(wù),原來服務(wù)端可以更加地去專注領(lǐng)域服務(wù)的沉淀。
總結(jié)與展望
Flutter+Serverless三端一體研發(fā)架構(gòu),能夠解決本篇提出的原有研發(fā)架構(gòu)的兩個(gè)問題,通過改變端側(cè)職能邊界有效減少協(xié)同,客戶端可以負(fù)責(zé)整個(gè)業(yè)務(wù),服務(wù)端有更多的時(shí)間進(jìn)行領(lǐng)域沉淀,但是閑魚實(shí)踐Flutter+Serverless三端一體研發(fā)架構(gòu)時(shí)也遇到以下挑戰(zhàn):
調(diào)試只能通過GAIA日志查看,目前規(guī)劃是把平臺日志抓取到本地,并且提供FaaS代碼遠(yuǎn)程調(diào)試功能。
問題定位、請求鏈路、壓測、安全生產(chǎn)的工作轉(zhuǎn)移,如何摸平與服務(wù)的差異。
以上是實(shí)踐過程中發(fā)現(xiàn)的新的挑戰(zhàn)都已經(jīng)列入下一階段工作中,后續(xù)會持續(xù)分享這些挑戰(zhàn)的思考與解決方案。
原文鏈接
本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的Flutter+Serverless端到端研发架构实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单人开发场景下的测试环境实践
- 下一篇: 【机器学习】AI系统实时监测独居老人症状