写点什么

Flutter+Serverless 端到端研发架构实践

  • 2020-01-01
  • 本文字数:2093 字

    阅读完需:约 7 分钟

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 机制进行快速开发联调。


闲鱼基于 FaaS 搭建 Dart Runtime 环境可参考《Dart编译技术在服务端的探索和应用》。

下单页一体化实践

下面以闲鱼下单页一体化为例,通过页面渲染与交互两部分展开一体化实践过程。


下单渲染一体化

从上图左侧可以看出,客户端渲染此页面需要在端侧请求 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 代码远程调试功能。

  • 运维成本增加 问题定位、请求链路、压测、安全生产的工作转移,如何摸平与服务的差异。


以上是实践过程中发现的新的挑战都已经列入下一阶段工作中,后续会持续分享这些挑战的思考与解决方案。


本文转载自公众号闲鱼技术(ID:XYtech_Alibaba)。


原文链接


https://mp.weixin.qq.com/s/JHqHmb00JEMPSAQbau2FIw


2020-01-01 10:003182

评论

发布
暂无评论
发现更多内容

存储优化补充篇:Explain索引优化实操

Coder的技术之路

高并发 高并发系统设计 项目实战 数据库调优 索引优化

中国式美好假期:用AI地图,抢先体验未来出行

脑极体

Nginx 常用配置清单

Java小咖秀

nginx Web 反向代理 HTTP

分解的三要素,从经典中感悟

顿晓

5月日更 分解

求求你别再用 MySQL offset 和 limit 分页了

xcbeyond

MySQL 5月日更

私域流量这件事,古代就有了……

白洞计划

新书见面 | 《云原生时代的微服务架构实践》

Damon

微服务 云原生 5月日更

“区块链+疫情预警”!这个科研团队研发了传染病预警系统

CECBC

疫情

内卷

Jxin

数据架构:数据冷热分离实践思考

程序员架构进阶

数据架构 架构设计 28天写作 5月日更 冷热分离

第一个鸿蒙应用

释缘

鸿蒙 HarmonyOS

NumPy之:使用genfromtxt导入数据

程序那些事

Python 数据分析 Numpy 程序那些事

从5大挑战带你了解多模态机器学习

华为云开发者联盟

机器学习 多模态机器学习 多模态 异构数据

网络攻防学习笔记 Day7

穿过生命散发芬芳

5月日更 网络攻防

程序员应如何打破平庸,杜绝淘汰,避免内卷!【强烈建议收藏!】

程序员 ios开发

惊呆了!阿里自爆2021年度九大Java技术合集,Github上已获赞98.3K

Java架构师迁哥

PHP文件包含小总结

Thrash

安全

华仔架构训练营作业(模块三)

不听不听王八念晶

AI英雄出少年!奔赴星辰,他们正在创造黄金时代

百度大脑

AI

存算解耦的多模型数据管理平台介绍:以星环科技TDH8.0为例

星环科技

人工智能 大数据 云平台 数据管理平台 存算解耦

区块链+农业,如何升级农业价值链

CECBC

农业

数仓ETL系统:给强大的“心脏”配上“超级流水线”

华为云开发者联盟

数据库 数据仓库 GaussDB(DWS) ETL系统 MPPDB

基于 MySQL 的消息队列系统架构设计文档

小遵

技术探索系列 - 轻松带你掌握JMM(2)

洛神灬殇

JVM JMM 5月日更

架构实战营模块3作业

Vic

架构实战营

Nginx-代理服务器

进击的梦清

nginx Docker Linux Docker-compose 代理

看了小姐姐的Spring SPI 总结,双非渣硕的我差点跳起来,被征服了

牛哄哄的java大师

Java

架构实战营 -- 模块三

永佳

架构实战营

如何做好用户画像?

石云升

创业 用户模型 5月日更

架构实战营模块三作业

竹林七贤

基于OpenPAI细化部署 Hadoop 集群

Damon

hadoop 5月日更

  • 扫码添加小助手
    领取最新资料包
Flutter+Serverless端到端研发架构实践_架构_古风_InfoQ精选文章