Serverless(无服务架构)被誉为下一代云计算,自概念推出以来,因为能带来研发交付速度提升与成本的降低在业内异常火爆。闲鱼客户端基于Flutter进行架构演进与创新,通过Flutter统一Android和iOS双端提升研发效能之后,希望通过Flutter+Serverless解决以下问题,从而进一步提升整体研发效率。

  1. 各角色间存在大量的协同,导致整体研发效率低。
  2. 移动端离业务越来越远,服务端没有时间做底层领域沉淀。

研发架构的演进

接下来我们带着这里两个问题回顾前后端研发架构演进的历史。

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+Serverless一体化收益

下单页已经上线,回顾整个研发过程,云端一体研发架构不仅仅只是新的技术方案,价值在于扩展端侧工作边界,带来生产关系的重塑。

协同效率提升:相比Flutter带来的双端一体来说,该三端一体的架构进一步提升了30%整体研发效率。

业务闭环:端侧还可以更快速地反馈与响应业务,不断尝试,从而搭建起更完善的产品模型,为业务创造更多的价值。

人员成长:端侧从只关注用户体验的开发资源,转变为整个业务研发的技术负责人,从只关注端侧的局部视角到更专注业务闭环的全局视角。Faas层调用底层领域服务来完成自己的业务,原来服务端可以更加地去专注领域服务的沉淀。

总结与展望

Flutter+Serverless三端一体研发架构,能够解决本篇提出的原有研发架构的两个问题,通过改变端侧职能边界有效减少协同,客户端可以负责整个业务,服务端有更多的时间进行领域沉淀,但是闲鱼实践Flutter+Serverless三端一体研发架构时也遇到以下挑战:

  1. FaaS层研发体验需要继续提升
    调试只能通过GAIA日志查看,目前规划是把平台日志抓取到本地,并且提供FaaS代码远程调试功能。
  2. 运维成本增加
    问题定位、请求链路、压测、安全生产的工作转移,如何摸平与服务的差异。

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

原文链接
本文为阿里云原创内容,未经允许不得转载。

Flutter+Serverless端到端研发架构实践相关推荐

  1. 飞猪基于 Serverless 的云+端实践与思考

    作者 | 王恒飞(承荫) 来源 | 阿里巴巴云原生公众号 本文整理自飞猪旅行前端技术专家–王恒飞(承荫)在[阿里云 Serverless Developer Meetup 上海站]上的分享.点击查看直 ...

  2. 阿里技术分享:闲鱼IM基于Flutter的移动端跨端改造实践

    本文由阿里闲鱼技术团队祈晴分享,本次有修订和改动,感谢作者的技术分享. 1.内容概述 本文总结了阿里闲鱼技术团队使用Flutter在对闲鱼IM进行移动端跨端改造过程中的技术实践等,文中对比了传统Nat ...

  3. DevOps流水线实践教程|端到端研发效能提升

    讲师介绍 课程寄语 我认为Jenkins是对我这些年运维经验的总结,起初我们运维同学都是编写脚本完成一些自动化的操作.而有了Jenkins我们可以将我们的运维经验与Jenkins设计理念融合完成自动化 ...

  4. Jenkins 流水线 获取git 分支列表_DevOps流水线实践教程|端到端研发效能提升

    讲师介绍 课程寄语 我认为Jenkins是对我这些年运维经验的总结,起初我们运维同学都是编写脚本完成一些自动化的操作.而有了Jenkins我们可以将我们的运维经验与Jenkins设计理念融合完成自动化 ...

  5. 基于Jenkins的DevOps流水线实践教程|2020全新制作|端到端研发效能提升

    讲师介绍 课程寄语 我认为Jenkins是对我这些年运维经验的总结,起初我们运维同学都是编写脚本完成一些自动化的操作.而有了Jenkins我们可以将我们的运维经验与Jenkins设计理念融合完成自动化 ...

  6. 基于Jenkins的DevOps流水线实践教程|2020全新制作|端到到研发效能提升

    讲师介绍 课程寄语 我认为Jenkins是对我这些年运维经验的总结,起初我们运维同学都是编写脚本完成一些自动化的操作.而有了Jenkins我们可以将我们的运维经验与Jenkins设计理念融合完成自动化 ...

  7. Jenkins 流水线 获取git 分支列表_基于Jenkins的DevOps流水线实践教程|2020全新制作|端到端研发效能提升...

    讲师介绍 课程寄语 我认为Jenkins是对我这些年运维经验的总结,起初我们运维同学都是编写脚本完成一些自动化的操作.而有了Jenkins我们可以将我们的运维经验与Jenkins设计理念融合完成自动化 ...

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

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

  9. Flutter 沙龙回顾 | 跨平台技术趋势及字节跳动 Flutter 架构实践

    11 月 23 日,字节跳动技术沙龙 | Flutter 技术专场 在北京后山艺术空间圆满结束.我们邀请到字节跳动移动平台部 Flutter 架构师袁辉辉,Google Flutter 团队工程师 J ...

最新文章

  1. mysql err 1118_MySQL ERROR1118报错详解 Row size too large
  2. 【计算理论】计算复杂性 ( 证明 非确定性图灵机 与 确定性图灵机 的时间复杂度 之间的指数关系 )
  3. 【双100%解法】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
  4. Pandas数据类型及操作
  5. day43,使用朋友pyMySQL连接数据库
  6. Mysql高级之游标
  7. 信号量与线程互斥锁的区别
  8. 如何用方正飞腾做出“凹”形文本框
  9. 深入解读Docker底层技术cgroup系列(4)——cgroup子系统cpu
  10. 欧姆龙plc OMRON SYSMAX CP1H-E 使用 CXONE_V4.60 连接和编程
  11. 程序员必备的网站推荐
  12. 小网站静态资源CDN加速实践记录
  13. Element-UI Select 下拉框 根据汉字拼音过滤选择选项(使用filter-method,filterable属性)
  14. Vue的生命周期是什么
  15. html表格自动分列,html页面中表单怎么用div分列布局
  16. 关于titanic数据集(一)
  17. 天下大势,分久必合,合久必分
  18. 一个不错的免费二级域名,可以自己解析A记录 CNAME等,而且是备案的域名。
  19. 7-16 藏头诗 (15 分)
  20. shell脚本编程基础(一)

热门文章

  1. 虚拟跳线软件干什么用的_视频教程:用 ESI 的虚拟跳线给你的声音添加效果
  2. python类的使用_python类的使用
  3. php 网站计数器,PHP实现网站访问量计数器
  4. 秒后面的单位是什么_为什么兰州马拉松很难跑出好成绩?
  5. python 批量查询网页导出结果_python批量查询网页的HTTP状态码
  6. 微信时代计算机教学,互联网+时代技工院校计算机教学方式研究
  7. 分别对时分秒加减的java_Java中关于获取时间(日期)的总结大全
  8. java题霸_牛客题霸每日一题 + NC50 + Java题解
  9. linux将db2账户添加到组_超实用的shell脚本--Linux安全加固设置,值得收藏
  10. jdk1.6的项目可以用1.8吗_摩托车链条的保养项目有哪些?可以用高压水枪清洗吗?...