Archsummit 2019重磅分享|閒魚Flutter&FaaS雲端一體化架構

講師介紹

國有,閒魚架構團隊負責人。在7月13號落幕的2019年Archsummit峯會上就近一年來閒魚在Flutter&FaaS一體化項目上的探索和實踐進行了分享。前端

傳統Native+Web+服務端混合開發的挑戰

隨着無線,IoT的發展,5G的到來,移動研發愈加向多端化發展。傳統的基於Native+Web+服務端的開發方式,研發效率低下,顯然已經沒法適應發展須要。架構

咱們但願探索閒魚這樣規模的獨立APP的高效研發架構。主要思路是圍繞Flutter解決多端問題,並使Flutter與FaaS等無服務容能力打通,造成雲端一體化的研發能力,支持一雲多端的發展須要。在某些場景已經取得效果,但願分享過程當中的思考,與你們交流。併發

跨端方案Flutter與RN的對比和選擇

閒魚選擇Flutter主要是出於高性能的考慮。Flutter高性能主要來源於2個緣由:框架

  1. Dart的AOT編譯能力。
  2. 自建渲染引擎,不須要轉換到Native控件,避免了線程跳躍等問題。

更多比較:異步

沒有銀彈的解決方案,Flutter與RN各有優勢。如何選擇因素不少,關鍵看如何取捨,舉個例子:工具

  • 當前團隊人員之前端JS棧爲主仍是Native爲主? 若是JS爲主,寫RN會更習慣。若是Android或iOS爲主,寫Flutter會更習慣,由於Flutter的研發工具和體驗與Native更類似。
  • 動態性和複雜交互的性能,哪一個更重要? 動態性重要RN合適,性能體驗重要Flutter不會失望。雖然Flutter也有一些動態化解決方案,例如JS轉接Flutter引擎的方案,Dart代碼CodePush的方案,組件化服務端組裝方案等,但這些動態方案都沒有RN這樣從JS層解決的這麼好。
  • 是否須要IoT等多端佈局?Flutter在嵌入式設計上有佈局,性能有更好的表現。

Dart做爲FaaS層的第一可選語言

雲端技術棧的打通,是減小協同的不錯的解法。以往前端+Node.js的一體化方案你們應該不會陌生,然而若是端側使用了Flutter,那雲側Dart天然是第一選擇。組件化

FaaS的本質是運行在雲端,那Dart適合用在雲/Server上嗎?佈局

Dart語言早於Flutter,在最初的設計上,Dart就能夠用於Web、Server。Dart具有一些服務端語言的特色:性能

  • 強類型,可預測性
  • GC
  • 異步和併發
  • 高性能的JIT
  • Profiler

閒魚首先嚐試將Dart做爲普通的Server,替代傳統的Java Server,而後再將Dart容器嵌入到FaaS容器中。創建Dart Server能力是第一步,也是主要的工做量所在。spa

閒魚在Dart Server方面的建設思路:

開發期:

  • 受Flutter的HotReload啓發,將HotReload移植到了Server側。
  • 利用Isolate,在開發環境中爲每一個開發人員分配一個Isolate,解決以往的環境衝突的問題。

運行期:

  • Dart自己是單線程異步模型,併發能力須要用Isolate支持。
  • 利用Dart的Zone的特性,能夠方便的實現調用鏈路的跟蹤,方便記錄Trace日誌。
  • 利用Dart支持的C++ Extension能力,能夠在Dart中訪問支持了C++的中間件包。另外,Server Mesh也是一個重要的思路,用於解耦異構語言之間的服務調用。

一體化的更深層思考

上述內容實現了Flutter&Dart FaaS的技術棧的統一,但僅技術棧統一還遠遠不夠,端、雲的同窗仍然沒法真正互補和一體化打通,緣由在於還有更多深刻問題須要考慮:

  • 一體化的業務閉環紅利如何最大化?一體化不只是效率的提高,還使一個同窗能夠Cover一個雲到端的業務,使業務閉環。
  • 如何消除雲端技術壁壘?僅技術棧打通,端人員仍是不會寫雲,緣由在於對雲的思惟模式的不理解,須要真正消除雲端的技術壁壘。
  • 如何使工做總量減小 ( 1+1<2 )?若是一體化後把工做量壓到一我的身上,那意義不大,須要使一體化下的總工做量下降。
  • 如何促進生產關係重塑? 生產關係須要適應新的生產力。

面向這些問題,閒魚的解法思路:

  • 業務閉環爲業務開發同窗帶來更好的成長空間,能夠完整和專一的思考業務。這是人上的核心動力。
  • 業務閉環是業務流程沉澱的方向
  • 以往的架構是雲、端分開架構的,一體化後有了更多的架構下沉空間,從而帶來了總工做量1+1<2的可能
  • 領域下沉和工具支撐是一體化的保證

 案例效果

案例一,一體化在資源均衡方面的體現。在近期的一個項目中,雲端一體化使本來2個月的項目時間,減小了20天。

案例二,一體化在業務閉環方面的體現。負責增加的一位開發同窗,專一在增加業務上,在合適的狀況下爲合適的人投放合適的內容,以此帶來用戶的增加和活躍效果。一體化的方式下,能夠統一雲、端的切面,業務研發再也不受雲、端的限制。

小結

一體化是建設高效研發框架的方向,並非全部場景都須要一體化的開發,但一體化的Flutter、FaaS等技術組件,能夠獨立使用,也會帶來效率提高,而且與原有的開發模式兼容。從一體化的思路去建設,可使總體架構體系更加一致,也有機會作一體的架構沉澱。
將來閒魚但願在一體化上作更多嘗試和深刻探索,包括一體化工具、一體化業務平臺、數據化智能化等方向。



本文做者:閒魚技術-國有 

閱讀原文

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索