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等技术组件,能够独立使用,也会带来效率提高,而且与原有的开发模式兼容。从一体化的思路去建设,可使总体架构体系更加一致,也有机会作一体的架构沉淀。
将来闲鱼但愿在一体化上作更多尝试和深刻探索,包括一体化工具、一体化业务平台、数据化智能化等方向。



本文做者:闲鱼技术-国有 

阅读原文

本文为云栖社区原创内容,未经容许不得转载。

相关文章
相关标签/搜索