闲鱼架构如何一招提效30%?Flutter+Serverless 研发实践公开
阿里妹导读:Serverless(无服务架构)被誉为下一代云计算,自概念推出以来,因为能带来研发交付速度提升与成本的降低在业内异常火爆。闲鱼客户端基于Flutter进行架构演进与创新,通过Flutter统一Android和iOS双端提升研发效能之后,希望通过Flutter+Serverless 解决各角色间存在大量的协同,导致整体研发效率低,移动端离业务越来越远,服务端没有时间做底层领域沉淀的问题,从而进一步提升整体研发效率。
研发架构的演进
接下来我们带着这里两个问题回顾前后端研发架构演进的历史。
PC互联网早期没有还没有前后端的概念,此阶段单个业务需求通常一个开发人员可以完成研发,前端网页与后端逻辑都写在一个工程中。随着业务越来越复杂,原本开发者负责前后端研发已经变得效率低下,此阶段随着移动互联网的爆发,服务端需要服务与PC、Android、iOS等多种前端。
服务端总是有一个疑问:服务端设计接口时,是应该面向 UI,还是应该面向通用服务?一个方案是抽取一部分服务端做 BFF(Backend For Frontend服务于前端的后端),作为前后端之间的适配层,核心是解决数据的聚合与编排,重新探索更合理的分层协作模式。
服务端写BFF带来新的问题,总是包接口无法提升个人能力。如果BFF由端侧同学开发可以解决这个问题,具体技术方案也是接下来我们要思考的问题。
云端一体化技术方案
Serverless 由 BaaS(Backend as a Sevice)与 FaaS(Function as a Service)两部分组成。BaaS 主要包括数据库存储、消息队列等能力,针对复杂的需求建议由服务端在 BaaS 层封装领域服务供 FaaS 层使用。作为端侧开发,核心关注客户端与FaaS层的代码开发。
目前公司 FaaS 环境已经支持 Java、Kotlin、Swift、Dart、Node.js 等多种语言与框架,闲鱼通过 Android(Flutter)、iOS(Flutter)、FaaS(Dart Runtime)都使用Dart 达到语言一体,并且实现协议一体与工程一体。
语言一体:Android、iOS、FaaS层使用 Dart 语言开发,实现三端语言统一,有效屏蔽FaaS层语言学习成本。
协议一体:通过一体化框架屏蔽通信细节,前后端同一份State,减少协议转换,前端同学调用FaaS服务时,如同调用本地函数一样简洁。
工程一体:前后端可以在同一个工程中进行开发,利用Dart特性可以通过Hot Reload机制进行快速开发联调。
下单页一体化实践
下面以闲鱼下单页一体化为例,通过页面渲染与交互两部分展开一体化实践过程。
下单渲染一体化
从上图左侧可以看出,客户端渲染此页面需要在端侧请求5个接口,处理渲染接口之间的逻辑,把接口返回的Data转为为ViewModel。经过一体化改造之后,原有在端侧的逻辑都移到FaaS层,包括聚合5个领域服务,处理业务逻辑,进行字段映射与页面编排,端侧无任何渲染与业务逻辑,直接获取返回的ViewModel刷新页面。以下是云端一体之后的流程图。
下单页交互操作一体化
从上图右侧可以看出,有4种操作都会改变实付款,原本这些操作处理逻辑都在端侧处理,一体化改造之后,端侧不存在任何计算逻辑,客户端每次操作都会请求服务端,有FaaS进行红包是否过期等数据校验,再返回页面数据进行刷新。
一体化研发框架
Nexus Framework:基于Flutter的一体化移动端UI框架。
Logic Engine:基于Flutter的一体化通信与调度框架。
Nexus Server:基于Dart Runtime的一体化服务端框架。
代码示例
下图为客户端下单页初始化的代码示例:
下图为FaaS层对客户端发起的初始化请求的处理:
以上是Flutter+FaaS双端协议一体的开发示例,双端都是通过BinderAction进行交互,Action中的State是同一个类型,从而有效屏蔽通信细节,提高研发效率。
收益与效果
下单页已经上线,回顾整个研发过程,云端一体研发架构不仅仅只是新的技术方案,价值在于扩展端侧工作边界,带来生产关系的重塑。
协同效率提升:相比Flutter带来的双端一体来说,该三端一体的架构进一步提升了30%整体研发效率。
业务闭环:端侧还可以更快速地反馈与响应业务,不断尝试,从而搭建起更完善的产品模型,为业务创造更多的价值。
人员成长:端侧从只关注用户体验的开发资源,转变为整个业务研发的技术负责人,从只关注端侧的局部视角到更专注业务闭环的全局视角。Faas层调用底层领域服务来完成自己的业务,原来服务端可以更加地去专注领域服务的沉淀。
总结与展望
Flutter+Serverless 三端一体研发架构,能够解决本篇提出的原有研发架构的两个问题,通过改变端侧职能边界有效减少协同,客户端可以负责整个业务,服务端有更多的时间进行领域沉淀,但是闲鱼实践Flutter+Serverless三端一体研发架构时也遇到以下挑战:
- FaaS层研发体验需要继续提升、调试只能通过GAIA日志查看,目前规划是把平台日志抓取到本地,并且提供FaaS代码远程调试功能。
- 运维成本增加 问题定位、请求链路、压测、安全生产的工作转移,如何抹平与服务的差异。
以上是实践过程中发现的新的挑战,现在都已经列入到下一阶段的工作中,我们通过优化技术方案完成这些挑战。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
全面上云的第一家快递,果然是它!
目前申通订单平台、巴枪系统等核心业务系统已稳定运行在阿里云上,云上日处理订单量近3000万。 申通技术总架构师醉易表示,申通选择全面上云,不只是变革基础架构,更是变革研发模式。“从内部看,基于传统架构的数据孤岛效应明显,导致信息不能共享,业务模式创新受阻。从外部看,包裹流转如何借助数据技术和IoT等技术提升效率已经成为核心议题。” 举例来说,基于传统IOE架构构建的系统无法支撑业务高速增长后的数据量膨胀,受限于容量订单系统只能保留3-6个月的信息查询,且无法对历史包裹进行在线搜索,相关应用都会受阻。 上云过程中,申通对云服务供应商开展了梳理、设计、验证和切换等环节在内的全面选型考察。阿里云具备稳定的基础架构、强大的数据计算能力,且菜鸟网络的基础架构及物联网能力同样构建在阿里云上,申通最终选择全面迁移至阿里云。 目前,包括订单平台、巴枪系统等申通核心业务已经运行在阿里云上,日处理订单量近3000万。在刚刚过去的2019年双11,申通快递拿下了包括“揽收率、签收率、服务质量综合得分”等在内的多项服务指标行业,通达系第一。 除了业务上的价值,全面上云还推动了申通内部的技术体系创新。醉易表示:...
- 下一篇
匠心之作 | 厉害了!阿里云自研存储引擎X-Engine又发顶会啦
1、What is X-Engine X-Engine是阿里云自研OLTP数据库存储引擎,已经广泛应用于包括钉钉、核心交易、阿里妈妈在内的阿里巴巴核心业务,在提供高性能的同时大幅降低了存储开销。 经过阿里双十一等高压场景的考验与打磨,RDS MySQL(X-Engine)版即将在阿里云上向外部客户提供服务,将技术红利带给云上用户。 X-Engine:An Optimized Storage Engine for Large-scale E-Commerce Transaction Processing 介绍了X-Engine的系统架构以及核心设计,发表在SIGMOD'19 Industrial Track。 近日,X-Engine团队的另一项工作FPGA-Accelerated Compactions for LSM-based Key-
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作