多业务模式下的交易链路探索与实践
一、业务背景
转转作为国内头部的二手闲置交易平台,从 2015 年成长至今,业务模式由 C2C 拓展至 B2C、C2B、B2B、C2B2C 等多模式并存的新格局,品类覆盖手机、图书、游戏等三十余种。
转转目前采用的是中台模式组织结构,中台负责提供通用的交易能力,灵活快速响应业务需求;业务方负责前台探索创新,为用户提供有价值的服务。
二、交易中台面临的问题
交易中台订单系统承载了全公司多数业务的通用订单流转能力,但是各业务模式的交易链路复杂多样、同中有异,例如下图:
1、不同业务模式交易链路主节点有差异,且锁库存、发货、结算等节点也有差异
2、需要同时支持多种业务模型共存,且互不影响
3、交易链路可拓展,节点可复用,维护成本低,响应速度快,满足业务日常快速迭代
4、链路稳定,数据准确,流程可视化,能快速定位问题
显然传统硬编码的方式已无法满足需求,FSM 有限状态机呼之欲出。
三、交易链路实践与探索
3.1、交易链路实践之 FSM 有限状态机
FSM 有限状态机是什么?
FSM 有限状态机(Finite-state machine, FSM), 是转转交易中台提供的一个通用状态流转方案,用于在有限个状态之间通过事件动作转移的数学模型。常用来描述对象在它的生命周期内所经历的状态序列,以及如何响应外界的各种事件等。
FSM 方案能做什么?
FSM 可快速搭建任何有流转的单据链路,同时解决链路相关的离线任务、事务消息等问题。
FSM 的四要素
FSM 将交易链路的状态流转进行了抽象和结构化,主要分为 4 个要素,即当前状态(现态)、事件、动作、目标状态(次态)。其中“现态”和“事件”是因,“动作”和“次态”是果,如下图所示:
现态:指当前所处的状态。
事件:又称为“条件”。当一个事件发生,将会触发一个动作,或者执行一次状态的迁移。
动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。
次态:条件满足后要迁往的新状态。
FSM 实战
在转转交易中台订单系统,抽象了符合交易场景的状态角色:
状态关系:初始状态、目标状态
角色:不同角色有不同的操作权限,比如卖家、买家、系统、客服
操作:对应事件 Event
handler:对应动作 Action 实现
FSM 可视化交易链路
运营后台可查看指定交易链路 FSM 状态机的状态流转全景图,如下图:
FSM 解决了交易主链路节点的流转问题,但是针对无状态的单节点子链路不适用,例如下单节点,包含商品、用户、地址、库存、促销、埋点等多维信息的校验与整合。那么如何在保障下单链路的拓展性、复用性、稳定性与高性能并存呢,请看下面的并发模型探索与实践。
3.2、交易链路实践之基于 future 的分阶段并发模型
关于交易下单场景,外行人看就是创建一个订单,一个 insert; 其实不然,其中的逻辑复杂度远不止这些,我们来看下单需要做哪些逻辑:
信息查询(商品、用户、地址、库存、活动、红包、业务线、标签等)
校验(库存校验、地址校验、红包校验、商品周期校验、服务校验、价格校验、积分校验、购买次数校验等)
风控拦截
订单信息组装
锁库存类(虚拟库存、实物库存、服务库存、锁红包、锁积分)
活动预算扣减
持久化(创建订单,创建支付单)
操作流水,日志埋点等等
以上只列了关键节点并不完整,意在表达下单逻辑的复杂性。
a、传统过程化串行模型:
显然,传统的过程化串行模型,无论从性能方面,还是从代码的灵活性、拓展性性方面已经无法满足我们的需求,所以这里我们下单采用了“基于 future 的分阶段并发模型”。
b、基于 future 的分阶段并发模型:
相较于传统过程化串行模型,有如下优点:
多线程使接口整体性能大幅提升;
将代码更具功能进行了抽象和结构化,分割成相邻状态的最小单元,当于搭建乐高积木,复用性显著提升;
拓展性与可维护性得到了质的飞跃;
但也存在一些缺点:
并发严格按照分组划分,组内耗时受约于最长任务耗时
分组划分下,线程池利用率不饱和
3.3、交易链路探索之基于事件驱动并发模型
转转公司 Avenger 系列提供了一个更加高效的并发组件(Avenger-Ultron),比原有的分阶段并发模型更加高效。
目前,该并发模型已广泛应用于公司内各业务线的复杂并发场景(一次用户请求接口内部需要聚合几十次 rpc 查询的信息)。
如果说,从传统过程化串行模型,进化到基于 future 的分阶段并发模型,是从 0 到 1 的过程;那么从基于 future 的分阶段并发模型,进化到基于事件驱动并发模型,可以看作从 1 到 100 的进步。最后加上拓扑图、监控、熔断、降级等周边插件 or 工具的完善,可实现 100 到∞的跨维度提升。
四、总结
并发模型解决无状态的复杂并发场景(如商品列表页、详情页、首页等),而 FSM 主要解决复杂业务场景交易链路状态流转的问题,但 FSM 的应用场景不止于交易订单,还可用于其他有状态的链路场景,比如 OA 工作流,质检流水线等。
FSM 只是一个框架,还需要搭建一整套基于它的外围业务逻辑,在交易链路状态流转的过程中,业务逻辑才是我们的肌肉。业务逻辑与框架共同组成了我们交易中台的技术体系,从而让技术成长更加健康,这也许就是中台的魅力。
作者简介
郭世杰,转转交易中台研发工程师
转转研发中心及业界小伙伴们的技术学习交流平台,定期分享一线的实战经验及业界前沿的技术话题。
关注公众号「转转技术」(综合性)、「大转转 FE」(专注于 FE)、「转转 QA」(专注于 QA),更多干货实践,欢迎交流分享~
评论