写点什么

一个多业务、多状态、多操作的交易链路

  • 2019-12-23
  • 本文字数:2062 字

    阅读完需:约 7 分钟

一个多业务、多状态、多操作的交易链路

演进过程

手淘的方案

类似的交易场景,手淘提出来不错的解决方案——新奥创。新奥创通过页面区块化与行为通信协议,提供基于业务的页面、组件、规则,前端实现动态模板,后端根据业务将页面进行编排,实现跨端、组件动态化。



可戳→手淘新奥创

闲鱼的问题

在闲鱼业务场景中,特有的 C2C 交易模式,与手淘 B2C 交易模式下差别较大,没有购物车、没有多商品聚合订单。手淘的交易流程可以在天猫、飞猪、盒马等通用。但闲鱼的交易模式,出于业务特征,不适合在手淘完成闲鱼交易流程。


闲鱼 C2C 交易链路业务相对固化,没有强页面动态化的需求。在这样的背景下,前后端向新奥创迁移,成本较高且收益较少。并且,新奥创的后端开发仍然需要关心页面编排,并不是更终态的研发模式。因此,闲鱼没有将新奥创作为技术选型。闲鱼交易链路的侧重点是:


  • 稳定:保证双端一致,减少双端逻辑不一致的场景;

  • 支持一定的动态化能力:端侧仅处理页面渲染,业务逻辑上云;

  • 新研发模式:前端深入业务,实现服务端页面渲染相关逻辑,后端领域下沉,专注领域建设,云端一体;


为达到这个目标,交易链路架构演进经过 3 个阶段:



闲鱼交易链路演进方向


我们来简单看一下闲鱼交易链路的架构演进过程:



闲鱼交易链路架构演进


在 2017 年-2018 年,交易链路由原有业务快速迭代时期的简单代码结构,进行了页面区块化改造。此时,服务端大致分为 3 层:底层数据模型、闲鱼 C2X 交易域、业务解决方案。后端基于底层数据模型,根据闲鱼不同业务特性与业务逻辑,搭建闲鱼 C2X 交易域,再以业务解决方案提供不同场景业务数据。


而端侧分为两层,业务数据解析将后端的业务数据,根据不同业务类型、不同交易状态进行解析、整合,转换为页面渲染协议 ViewModel,同时将页面区块化,抽离出不同业务通用组件,根据 ViewModel 直接渲染。


  • 页面区块化

  • 操作 Action 化

第二阶段:两端一体,逐步上云

2019 年,在第一阶段的基础上,我们首先解决双端逻辑不一致的问题,选择了 Flutter 作为跨平台解决方案,同时通过 FishRedux 进行页面区块化改造。交易操作也通过 CommonAction 完成逻辑一致,实现端上的交易操作中台,提供给交易链路多业务场景进行调用。


  • Flutter&Fish Redux

  • 交易操作中心

  • 业务上云

  • 此时,服务端仍分为 3 层:底层数据模型、闲鱼 C2X 交易域、业务层。业务层包含业务解决方案、页面渲染解析。客户端上仅保留渲染层。

第三阶段:云端一体

在前一阶段,客户端将端侧业务逻辑完整上云,但同样出现了瓶颈,在交易业务场景,后端需要更多的精力进行领域建设和沉淀,更少关心页面渲染交互的逻辑,我们希望能有更高效的研发模式,减少各端研发之间的大量的协同, 提升整体研发效率。


此时我们选择统一技术栈 Dart,通过 FaaS 无服务器能力建设,采用 Flutter+FaaS(Dart Runtime)云端一体的研发模式,让客户端同学来写服务端胶水层代码,同时还无需关心传统服务端运维、扩容等工作。原有的业务聚合、渲染协议解析,由客户端同学在 Server 完成,实现逻辑归一,完成端到端的研发闭环,实现资源配置的优化。



云端一体化工程体系


在云端一体的研发模式中,Server 进行了重新的分层,后端能够专注领域建设,客户端开发完成原有的业务解决方案以及到渲染协议的解析,即下图标红部分。当然,在实际开发过程中,FaaS 与领域的边界因实际业务有一定交集。


  • 服务端开发:完成领域建设;

  • 客户端开发:聚合多域信息,实现渲染协议,端侧直接进行 UI 渲染;


云端一体阶段详细架构


渲染接口提供页面渲染数据,下图为 FaaS 部分的代码结构,完成接口校验后,定义页面协议,同时根据业务需求,将多领域数据进行聚合填充。



渲染接口设计


前文中,我们介绍过,交易包含有多操作,在不同业务中,时常有新增操作的需求。不同订单类型不同订单状态包含哪些操作,由渲染接口实现操作动态可配置,例如”已下单未付款“C2C 普通交易订单,包含“付款”、”关闭交易“操作。操作触发后的实现,需要业务校验、触发领域服务的交互行为,由端侧完全迁移至 FaaS,通过闲鱼的 Nexus 框架使用 Logic Engine 的 Action 通信协议,例如,用户触发创建订单行为,即触发 CREATE_ORDER 的 Action,FaaS 部分调用下单的领域服务后,通过 NativeApi,触发端上相应的操作唤起收银台、跳转链接。



交互接口设计

效果

当前闲鱼交易链路在云端一体的阶段不断深耕,目前已经落地了下单页面,由原有的前后端 3 人开发变为 1 人开发,减少协同显著提升研发效率,其他场景也已经在规划落地中。下单页云端一体版本闲鱼 11 月版本开始灰度,有兴趣的同学可以亲身体验。

后续计划

本文介绍了闲鱼交易链路的架构演进的过程与思考,不同业务场景适用不同的业务架构,在业务发展过程中,会遇到各式各样的问题或瓶颈,针对业务当前问题与发展方向,选用合理的、收益与成本得宜的技术方案,是顺势而为。闲鱼云端一体化应用架构的落地场景不仅是交易链路,后续会以交易链路为范例不断演进与扩展。


本文转载自淘系技术公众号。


原文链接:https://mp.weixin.qq.com/s/EHHbRwba5YuhO5rEgv3lrA


2019-12-23 17:37757

评论

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

运维工程师核心工作是什么?用什么运维工具好?

行云管家

云计算 运维 IT运维

一个完整的内网渗透是什么样子的

网络安全学海

网络安全 信息安全 网络 渗透测试 漏洞分析

APP动态换肤方案详解

Geen练

ios App theme 换肤

2021年7月券商App行情刷新及交易体验评测报告

博睿数据

极客星球 | Android SDK架构设计之路

MobTech袤博科技

架构 sdk andiod

fil挖矿官网有哪些?fil挖矿平台有哪些?

fil挖矿平台有哪些 fil挖矿官网有哪些

员工流动大难管理?织信低代码+人事管理系统轻松掌控员工档案信息

优秀

低代码

聊聊我在腾讯和字节工作感受

程序员鱼皮

Java 互联网 求职 IT 实习

网络协议

ltc

TCP HTTP web socket

Aosp 之 Property

Qunar技术沙龙

android API properties 字典树 内存映射

趁着课余时间学点Python(十一)面向对象的理解(高潮)

ベ布小禅

8月日更

GitHub星标63K霸榜半月!阿里大牛的微服务分布式架构笔记已上线

Java 编程 IT 计算机 知识

DCS_FunTester分布式压测框架更新(二)

FunTester

分布式 性能测试 测试框架 测试开发 FunTester

深耕城市治理场景,百度智能云联合慧联无限推内涝智能检测预警

百度大脑

人工智能 洪水

嗨!你有一封来自百度世界大会的“情书”,818等你开启

百度大脑

人工智能

博睿数据分布式手机真机监测+两大核心技术,轻松掌控短信服务质量与用户体验

博睿数据

【共识专栏】HotStuff共识

趣链科技

区块链 共识机制 拜占庭容错 共识算法

云服务器在市场变化下的技术突破,企业运维中的基础保障

九河云安全

架构训练营 - 模块四 - 作业

姑射仙人

架构训练营

Hadoop生态系统Hive:SQL执行(一)

正向成长

hadoop hive

如何实现H.264的实时传输?

拍乐云Pano

啃了三个月!靠着这份大厂Java面试全秘籍,成功入职京东,税前30K

Java 程序员 架构 面试 计算机

极客星球 | 应用开发的性能优化探索

MobTech袤博科技

性能

【Takin应用日记】记一次TransmittableThreadLocal引起的业务异常

TakinTalks稳定性社区

高可用 性能压测 生产环境全链路压测 takin

写作 7 堂课——【7. 复盘式写作】

LeifChen

复盘 写作技巧 8月日更

滴滴架构师被迫离职后,只留下这份731页Java程序性能优化手册

Java 编程 架构 面试 调优

小心这个陷阱:为什么总是你赔钱?

非著名程序员

认知提升 个人提升 投资理财 8月日更

一个多业务、多状态、多操作的交易链路_语言 & 开发_淘系技术_InfoQ精选文章