天天看點

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

作者:閑魚技術-國有  

講師介紹

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

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

随着無線,IoT的發展,5G的到來,移動研發越發向多端化發展。傳統的基于Native+Web+服務端的開發方式,研發效率低下,顯然已經無法适應發展需要。

我們希望探索閑魚這樣規模的獨立APP的高效研發架構。主要思路是圍繞Flutter解決多端問題,并使Flutter與FaaS等無服務容能力打通,形成雲端一體化的研發能力,支援一雲多端的發展需要。在某些場景已經取得效果,希望分享過程中的思考,與大家交流。

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

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

閑魚選擇Flutter主要是出于高性能的考慮。Flutter高性能主要來源于2個原因:

  1. Dart的AOT編譯能力。
  2. 自建渲染引擎,不需要轉換到Native控件,避免了線程跳躍等問題。
Archsummit 2019重磅分享|閑魚Flutter&FaaS雲端一體化架構

更多比較:

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

沒有銀彈的解決方案,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自然是第一選擇。

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

FaaS的本質是運作在雲端,那Dart适合用在雲/Server上嗎?

Dart語言早于Flutter,在最初的設計上,Dart就可以用于Web、Server。Dart具備一些服務端語言的特點:

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

閑魚首先嘗試将Dart作為普通的Server,替代傳統的Java Server,然後再将Dart容器嵌入到FaaS容器中。建立Dart Server能力是第一步,也是主要的工作量所在。

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

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

 

開發期:

  • 受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 )?如果一體化後把工作量壓到一個人身上,那意義不大,需要使一體化下的總工作量降低。
  • 如何促進生産關系重塑? 生産關系需要适應新的生産力。
Archsummit 2019重磅分享|閑魚Flutter&FaaS雲端一體化架構

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

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

 案例效果

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

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

案例二,一體化在業務閉環方面的展現。負責增長的一位開發同學,專注在增長業務上,在合适的情況下為合适的人投放合适的内容,以此帶來使用者的增長和活躍效果。一體化的方式下,可以統一雲、端的切面,業務研發不再受雲、端的限制。

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

小結

一體化是建設高效研發架構的方向,并不是所有場景都需要一體化的開發,但一體化的Flutter、FaaS等技術元件,可以獨立使用,也會帶來效率提升,并且與原有的開發模式相容。從一體化的思路去建設,可以使整體架構體系更加一緻,也有機會做一體的架構沉澱。

未來閑魚希望在一體化上做更多嘗試和深入探索,包括一體化工具、一體化業務平台、資料化智能化等方向。

繼續閱讀