Archsummit 2019重磅分享|闲鱼Flutter&FaaS云端一体化架构
作者:閑魚技術-國有
講師介紹
國有,閑魚架構(gòu)團隊負責人。在7月13號落幕的2019年Archsummit峰會上就近一年來閑魚在Flutter&FaaS一體化項目上的探索和實踐進行了分享。
傳統(tǒng)Native+Web+服務端混合開發(fā)的挑戰(zhàn)
隨著無線,IoT的發(fā)展,5G的到來,移動研發(fā)越發(fā)向多端化發(fā)展。傳統(tǒng)的基于Native+Web+服務端的開發(fā)方式,研發(fā)效率低下,顯然已經(jīng)無法適應發(fā)展需要。
我們希望探索閑魚這樣規(guī)模的獨立APP的高效研發(fā)架構(gòu)。主要思路是圍繞Flutter解決多端問題,并使Flutter與FaaS等無服務容能力打通,形成云端一體化的研發(fā)能力,支持一云多端的發(fā)展需要。在某些場景已經(jīng)取得效果,希望分享過程中的思考,與大家交流。
跨端方案Flutter與RN的對比和選擇
閑魚選擇Flutter主要是出于高性能的考慮。Flutter高性能主要來源于2個原因:
更多比較:
沒有銀彈的解決方案,Flutter與RN各有優(yōu)點。如何選擇因素很多,關鍵看如何取舍,舉個例子:
- 當前團隊人員以前端JS棧為主還是Native為主? 如果JS為主,寫RN會更習慣。如果Android或iOS為主,寫Flutter會更習慣,因為Flutter的研發(fā)工具和體驗與Native更相似。
- 動態(tài)性和復雜交互的性能,哪個更重要? 動態(tài)性重要RN合適,性能體驗重要Flutter不會失望。雖然Flutter也有一些動態(tài)化解決方案,例如JS轉(zhuǎn)接Flutter引擎的方案,Dart代碼CodePush的方案,組件化服務端組裝方案等,但這些動態(tài)方案都沒有RN這樣從JS層解決的這么好。
- 是否需要IoT等多端布局?Flutter在嵌入式設計上有布局,性能有更好的表現(xiàn)。
Dart作為FaaS層的第一可選語言
云端技術棧的打通,是減少協(xié)同的不錯的解法。以往前端+Node.js的一體化方案大家應該不會陌生,然而如果端側(cè)使用了Flutter,那云側(cè)Dart自然是第一選擇。
FaaS的本質(zhì)是運行在云端,那Dart適合用在云/Server上嗎?
Dart語言早于Flutter,在最初的設計上,Dart就可以用于Web、Server。Dart具備一些服務端語言的特點:
- 強類型,可預測性
- GC
- 異步和并發(fā)
- 高性能的JIT
- Profiler
閑魚首先嘗試將Dart作為普通的Server,替代傳統(tǒng)的Java Server,然后再將Dart容器嵌入到FaaS容器中。建立Dart Server能力是第一步,也是主要的工作量所在。
閑魚在Dart Server方面的建設思路:
開發(fā)期:
- 受Flutter的HotReload啟發(fā),將HotReload移植到了Server側(cè)。
- 利用Isolate,在開發(fā)環(huán)境中為每個開發(fā)人員分配一個Isolate,解決以往的環(huán)境沖突的問題。
運行期:
- Dart本身是單線程異步模型,并發(fā)能力需要用Isolate支持。
- 利用Dart的Zone的特性,可以方便的實現(xiàn)調(diào)用鏈路的跟蹤,方便記錄Trace日志。
- 利用Dart支持的C++ Extension能力,可以在Dart中訪問支持了C++的中間件包。另外,Server Mesh也是一個重要的思路,用于解耦異構(gòu)語言之間的服務調(diào)用。
一體化的更深層思考
上述內(nèi)容實現(xiàn)了Flutter&Dart FaaS的技術棧的統(tǒng)一,但僅技術棧統(tǒng)一還遠遠不夠,端、云的同學仍然無法真正互補和一體化打通,原因在于還有更多深入問題需要考慮:
- 一體化的業(yè)務閉環(huán)紅利如何最大化?一體化不僅是效率的提升,還使一個同學可以Cover一個云到端的業(yè)務,使業(yè)務閉環(huán)。
- 如何消除云端技術壁壘?僅技術棧打通,端人員還是不會寫云,原因在于對云的思維模式的不理解,需要真正消除云端的技術壁壘。
- 如何使工作總量減少 ( 1+1<2 )?如果一體化后把工作量壓到一個人身上,那意義不大,需要使一體化下的總工作量降低。
- 如何促進生產(chǎn)關系重塑? 生產(chǎn)關系需要適應新的生產(chǎn)力。
面向這些問題,閑魚的解法思路:
- 業(yè)務閉環(huán)為業(yè)務開發(fā)同學帶來更好的成長空間,可以完整和專注的思考業(yè)務。這是人上的核心動力。
- 業(yè)務閉環(huán)是業(yè)務流程沉淀的方向
- 以往的架構(gòu)是云、端分開架構(gòu)的,一體化后有了更多的架構(gòu)下沉空間,從而帶來了總工作量1+1<2的可能
- 領域下沉和工具支撐是一體化的保證
案例效果
案例一,一體化在資源均衡方面的體現(xiàn)。在近期的一個項目中,云端一體化使原本2個月的項目時間,減少了20天。
案例二,一體化在業(yè)務閉環(huán)方面的體現(xiàn)。負責增長的一位開發(fā)同學,專注在增長業(yè)務上,在合適的情況下為合適的人投放合適的內(nèi)容,以此帶來用戶的增長和活躍效果。一體化的方式下,可以統(tǒng)一云、端的切面,業(yè)務研發(fā)不再受云、端的限制。
小結(jié)
一體化是建設高效研發(fā)框架的方向,并不是所有場景都需要一體化的開發(fā),但一體化的Flutter、FaaS等技術組件,可以獨立使用,也會帶來效率提升,并且與原有的開發(fā)模式兼容。從一體化的思路去建設,可以使整體架構(gòu)體系更加一致,也有機會做一體的架構(gòu)沉淀。
未來閑魚希望在一體化上做更多嘗試和深入探索,包括一體化工具、一體化業(yè)務平臺、數(shù)據(jù)化智能化等方向。
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的Archsummit 2019重磅分享|闲鱼Flutter&FaaS云端一体化架构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【译】用SQL统一所有:一种有效的、语法
- 下一篇: 基于External-DNS的多集群Se