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