作者|王树彬(国有)
出品|阿里巴巴新零售淘系技术部
导读:随着无线,IoT 的发展, 5G 的到来,移动研发越发向多端化发展。传统的基于 Native+Web+ 服务端的开发方式研发效率低下,显然已经无法适应发展需要。本文将会介绍闲鱼近一年来在 Flutter&FaaS 一体化项目上的探索和实践。
传统 Native+Web+ 服务端混合开发的挑战
我们希望探索闲鱼这样规模的独立 APP 的高效研发架构。主要思路是围绕 Flutter 解决多端问题,并使 Flutter 与 FaaS 等无服务容能力打通,形成云端一体化的研发能力,支持一云多端的发展需要。
在某些场景已经取得效果,过程中的思考与大家交流。
跨端方案 Flutter 与 RN 的对比与选择
闲鱼选择 Flutter 主要是出于高性能的考虑。 Flutter 高性能主要来源于 2 个原因:
Dart 的 AOT 编译能力。
自建渲染引擎,不需要转换到 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 能力是第一步,也是主要的工作量所在。
闲鱼在 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 等技术组件,可以独立使用,也会带来效率提升,并且与原有的开发模式兼容。从一体化的思路去建设,可以使整体架构体系更加一致,也有机会做一体的架构沉淀。未来闲鱼希望在一体化上做更多尝试和深入探索,包括一体化工具、一体化业务平台、数据化智能化等方向。
One More Thing
就是现在!客户端/服务端Java/架构/算法/前端/质量 工程师,小闲鱼通通期待你的加入,base杭州阿里巴巴西溪园区。欢迎天马行空的你,加入这个颜值+才华逆天的团队,成就最好的自己! 投喂简历给小闲鱼→guicai.gxy@alibaba-inc.com
另外小编也会在近期搜罗一些,目前在招的岗位,请持续关注哦~
推荐阅读
重磅开源|AOP for Flutter开发利器——AspectD