闲鱼基于Flutter+FaaS的业务框架思考与实践
闲鱼将使用 Flutter 和 FaaS 来建设未来的技术开发体系,这是一项长期的规划,新的技术在现在看来犹如雾里看花,需要我们不断的思考,探索,实践才能渐渐描绘出它的轮廓。本文对此提供一种思考角度,对未来基于 FaaS+Flutter 之上的编程形态做思考,并介绍自己的初步实践。
Flutter,Faas,与闲鱼的一体化
Flutter+FaaS 的技术体系作为支撑一体化开发的基础设施该提供什么样的能力?
基于新的一体化基础设施的业务开发是什么样的形态?
Flutter+Faas 一体化下的开发形态思考
数据处理:泛指传统的服务端 REST API 这部分,在一体化的场景下,这部分会由 FaaS 函数来实现,其实这一部分的职责和定位并没有改变,只是开发的组织沟通形式变了。传统开发页面会由服务端和客户端同学合力完成,后面可能由一位同学前后一体化开发完成。康威定律指出,软件的设计和开发人员的组织沟通结构是息息相关的,所以这一部分可能有较大的变化,但首先是他与客户端的交互方式上的变化,即网络通信。
网络通信:在一体化场景下,前后端都由一人实现,代码也会是一个工程中的同种语言,网络通信会加轻量安全,使用起来也会更加自然,接近于普通的函数调用。一个可能的变化是,通信模式可能会突破 CS 模式,在一次通信“会话”中,Client 端和 Server 端能更加自然的相互调用,实现“对等对话”,而不是传统的客户端请求,服务端响应。随着网络硬件升级,网速在变快,通信成本在下降,创新的空间很大。
状态管理:应用状态很大程度上是缓存在客户端上的数据,受技术体系隔离,开发沟通成本,网络通信成本的影响,在客户端上缓存状态是有必要的。但在一体化的场景中,这些因素的影响在减小和消失,所以我们想进一步的消灭状态,将状态管理降至最小,尽可能的由底层管理。
界面绘制:也许是受 Flutter 的影响,响应式风格结合数据驱动的UI理念非常契合我们的思路,这也是业界 UI 开发框架的潮流。
一体化框架设计实践
实践中的挑战与借鉴
要建设完善一体化技术体系不是容易的事情,实践中肯定会有诸多挑战。好消息是 FaaS 和它背后的 Serverless 理念已经是业内潮流了,实践也在如火如荼的进行中。其中,阿里的前端同学集中力量,对 Serverless 已经实践的很深入了,虽然并不是一体化的理念,但实践上很多的思路可以做相互印证和借鉴:
开发部署工具链:闲鱼一体化工程依赖于底层开发部署工具链的支持,是基础设施的一部分,部署也是 Serverless 体系中关键一环,从前端同学的实践中看,工具,插件和平台都有。闲鱼有直接使用的平台,也会有自建的工具插件,长远会做一步的体系标准化建设。
全链路追踪监控:这是工程化必须的系统,闲鱼直接受益于集团的平台,但也会建设自己特殊场景的工具,比如借鉴 Flutter 的函数热更新,本地一体化调试等。
网络通信:我们的很多设想对网络通信有着很高的要求,诚然,网络质量会越来越好,成本也会也来越低,但弱网场景总会存在,如何保证服务的稳定可用依然是挑战。一体化会弱化开发对网络的感知,提供新的网络使用方式。
组件分治:在闲鱼的业务中,复杂页面是始终要考虑的问题。在前面的设计中,我们对此做了预留( Converter 部分),但前后一体化的组件该怎么抽象,又如何组合复用,我们还在探索中。
END