本文转载自“闲鱼技术”公众号。

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 代码远程调试功能。

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

以上是实践过程中发现的新的挑战,现在都已经列入到下一阶段的工作中,我们通过优化技术方案完成这些挑战。

本文缩略图:icon by 泉子Zq_222

Tips:

# 点下“在看”❤️

# 然后,公众号对话框内发送“家书”,试试手气?????

# 本期奖品是阿里家书一套

闲鱼架构如何一招提效 30% ?相关推荐

  1. 阿里巴巴闲鱼架构负责人王树彬:万亿交易规模技术架构实践

    中生代技术 链接技术大咖,分享技术干货 全文:5000字 预见未来的最好方式就是创造未来,用「云原生Talk」记录云原生时代下每个造梦者的故事. 造梦者 | 王树彬,阿里巴巴闲鱼架构负责人 2014年 ...

  2. 闲鱼架构专家,详解Flutter技术架构15页ppt:跨端方案如何选择?

    文/技术领导力社区 编辑/Emma 闲鱼架构团队负责人国有.技术专家宗心.灯阳,在文章及公开分享中介绍了Flutter在闲鱼的实践,内容包括:选择Flutter的背景和思考.闲鱼的Flutter新混合 ...

  3. 一个多业务、多状态、多操作的交易链路?闲鱼架构这样演进

    前言 双十一刚刚结束,成交额2684亿震惊全世界,每秒订单峰值达54.4W笔.在闲鱼2000万DAU,交易数额同样增长迅速的今天,我们如何保障交易链路的稳定与快速支撑业务?这篇文章从客户端开发的角度, ...

  4. 从0到千万DAU,这5年闲鱼架构如何演进?

    阿里妹导读:闲鱼品牌创立于14年阿里的某个茶水间,从0开始到现在千万DAU,5年时间里闲鱼见证了闲置物品从线下到线上交易的转移.而线上交易的繁荣,则需要业务架构做相应的调整.演进才能支撑业务的快速发展 ...

  5. 闲鱼架构专家,详解亿级C2C电商平台,商品体系架构如何搭建?

    文章来源:咸鱼技术(XYtech_Alibaba) 作者:意境 背景 闲鱼是一个典型的C2C场景的闲置交易平台,每个在闲鱼的用户都能享受到自由交易的乐趣,只要简单的输入商品名,商品价格,库存等信息就能 ...

  6. 一个多业务、多状态、多操作的交易链路,闲鱼架构如何演进?

    作者|陆漫(君爱)  出品|阿里巴巴新零售淘系技术部 双十一刚刚结束,成交额2684亿震惊全世界,每秒订单峰值达54.4W笔.在闲鱼2000万DAU,交易数额同样增长迅速的今天,我们如何保障交易链路的 ...

  7. 云栖大会|闲鱼Serverless架构实践(精品)

    造梦者 | 王树彬(国有),阿里巴巴闲鱼架构负责人 2014年6月28日,阿里即将赴美上市的这一年,西溪园区的一个茶水间里,28个人日夜赶工了三个月后,上线了一个闲置交易平台--闲鱼.今年5月份,在阿 ...

  8. Archsummit 2019重磅分享|闲鱼Flutter&FaaS云端一体化架构

    作者:闲鱼技术-国有 讲师介绍 国有,闲鱼架构团队负责人.在7月13号落幕的2019年Archsummit峰会上就近一年来闲鱼在Flutter&FaaS一体化项目上的探索和实践进行了分享. 传 ...

  9. 闲鱼靠什么支撑起万亿的交易规模?| 云原生Talk

    造梦者 | 王树彬,阿里巴巴闲鱼架构负责人 2014年6月28日,阿里即将赴美上市的这一年,西溪园区的一个茶水间里,28个人日夜赶工了三个月后,上线了一个闲置交易平台--闲鱼.今年5月份,在阿里巴巴的 ...

最新文章

  1. 我翻译的一篇文章,OO设计中对象的创建和使用
  2. 智能车大赛AI视觉组参考答案
  3. 【OpenStack】OpenStack系列1之Python虚拟环境搭建
  4. 在Anacoda中管理多个版本Python
  5. C++ vector容器简单解释
  6. 数据结构与算法 / 哈希算法
  7. java重命名sheet失败_java jxl excel 数据导出 重新命名无效的工作表名称 | 学步园...
  8. 理解LinkedHashMap
  9. VS Code+Vim打造C/C++极致开发环境
  10. 异常:操作可能会破坏运行时稳定性
  11. java设置本机地址写在哪个类_JAVA获取指定的类型的本机MAC地址
  12. 教你免费轻松下载百度文库的文件
  13. 【预测模型】基于狼群算法优化BP神经网络实现预测matlab源码
  14. [Xilinx FPGA] #1 Xilinx ISE 工程开发全流程笔记
  15. GitHub开源项目学习 电商系统Mall (一) Mall简介
  16. KataGo线程/权重/显卡
  17. Android stuido中更改图片编辑软件
  18. indesign怎么拼图_自己动手制作个性相册
  19. rep()函数的学习
  20. 海康 综合安防管理平台 对接

热门文章

  1. 第05周:吴恩达 Andrew Ng 机器学习
  2. 如何提取pdf文件中的某一页?
  3. 顶级的JavaScript框架、库、工具及其使用
  4. 【基于FPGA的运动目标实时跟踪检测】
  5. Windows Server 2012 远程桌面设置及授权
  6. 中国床上用品行业前景调研与投资竞争力分析报告2022-2028年
  7. 为什么es中nested数据must_not不生效?
  8. 华为或首次成为年度销量第二大手机品牌,明年将迎来更大挑战
  9. 更改计算机硬盘名字,如何修改盘符 – 磁盘及光驱名称错乱,教你怎么更改回来...
  10. React+antd在线上动态更换皮肤主题