业务实战场景(十二)交易中心

2022-05-04  本文已影响0人  后来丶_a24d

思维导图

思维导图.png

实战汇总


交易中心

整体图示

整体.png
  1. 订单服务: 下订单等功能
  2. 支付服务: 主要跟第三方对接,比如微信支付,支付宝支付,还有51社保等
  3. 售后服务: 比如退款等功能
  4. 开票服务: 订单完成之后需要开发票
  5. 结算服务: 比如用户在淘宝买完东西后,订单是在淘宝这边,但是最终还是要给商家结算钱款
  6. 对账服务: 分为实时对账,T+1对账。这块可以大数据处理,实时使用Flink,离线使用Spark,对第三方服务的流水进行自己服务对比,数据不匹配则报警

部分ER图

交易系统分析.png
  1. 订单表Order,与订单收货地址表是一对一关系,即一个订单只有一个收货地址; 与订单优惠表是一对多关系,一个订单可以有多张优惠券; 与订单商品表也是一对多关系,一个订单可以有多个商品; 与订单运单表是一对一关系,一个订单只有一个物流信息; 与费用表也是一对一关系,一个订单支付方式啥的是唯一的; 与退款单也是一对一的关系如果有退款的话。当时订单优惠表,订单商品都是跟优惠系统/商品系统id关联
  2. Refund: 退款订单表,与订单是一对一的关系; 与费用表也是一对一关系,一个订单支付方式啥的是唯一的
  3. 支付信息表Payment_info: 与费用表是一一对应关系
  4. 这里只展示部分ER图

订单服务

商品详情页点点去支付时生成订单

商品详情页点点去支付时生成订单.png

1.1 看是否在黑名单: Flink实时数据判断用户是否有非法操作,有的话写入风控
1.2 获取SPU: 需要去商品服务获取
1.3 获取优惠信息: 需要从优惠服务获取
1.4 订单生成
1.5 完成后跳支付方式页面


支付服务

选择支付方式后的下一页,订单支付

选择支付方式后的下一页,订单支付.png

1.1 看是否在黑名单: Flink实时数据判断用户是否有非法操作,有的话写入风控
1.2 收银台支付: 调用支付服务,支付服务调第三方支付
1.4 异步回调结果: 第三方服务异步回调
1.5 更新支付状态: 支付服务更新状态
1.6 支付成功发MQ: 成功后发MQ。MQ通过事务表保证最终一致性保证,或者类似RocketMq这种带事务的MQ。
2.1 前端轮询是否完成支付
2.2 选择支付方式后下一页提交订单,这时候锁库存,根据店铺进行拆单,支付时同时支付,支付单关联多个订单id
2.3 物流服务,权益服务: 如果监听MQ支付成功,则处理MQ消费如果订单是有实物类型则需要发送货物并标记已发货,权益服务一样处理方式。这里要做好幂等处理


结算服务

51社保对接流程

  1. 获取access_token,因为涉及第三方对接,所以在签署完合同会获取到access_key(确定业务方是谁)和access_secret,通过key和secret获取到有时效性的access_token
  2. 携带access_token获取发放结算单的配置
  3. 调用单笔发放结算单接口,这里51社保会做幂等处理
  4. 51社保异步回调通知,这里是通过回调地址的方式通知,51社保有做补偿最多好像是15次,最后一次间隔15h。这里只是通知状态变更,具体的明细状态还需要通过查询明细接口获取。不直接回调全部结果是因为对于51社保的业务方提供的回调地址可能是http的不安全。这里回调是51社保提供了sign,业务方可检验sign保证是51社保回调的
  5. 如果超过一天未回调需要主动查询,这里简单做可以通过线程扫表的方式处理
  6. 大数据,离线统计对账业务侧数据结算单和51社保对应的明细单,减少财务人工对账出错概率

51社保报税

财务在51社保上转账

转账业务一致性保证

可靠消息最终一致性
可靠消息最终一致性.png
  1. A 系统先向 mq 发送一条 prepare 消息,如果 prepare 消息发送失败,则直接取消操作
  2. 如果消息发送成功,则执行本地事务,不一定是插入数据库,也可以是发MQ消息
  3. 如果本地事务执行成功(或者发MQ成功),则向 mq 发送一条 confirm 消息,如果发送失败,则发送回滚消息
  4. B 系统定期消费 mq 中的 confirm 消息,执行本地事务,并发送 ack 消息。如果 B 系统中的本地事务失败,会一直不断重试,如果是业务失败,会向 A 系统发起回滚请求
    5.mq 会定期轮询所有 prepared 消息调用系统 A 提供的接口查询消息的处理情况,如果该 prepare 消息本地事务处理成功,则重新发送 confirm 消息,否则直接回滚该消息
TCC转账
TCC.png
  1. 汇款服务
    1.1 Try:检查A账户的有效性;检查A账户的余额是否充足;从A账户中扣减100元,并将状态置为转账中;预留扣减资源,将从A账户向B账户转账100元这个事件存入消息或日志
    1.2 Confirm:不做任何操作
    1.3 Cancel:A账户增加100元;从日志或消息中释放扣减资源。
  2. 收款服务
    2.1 Try:检查B账户的有效性
    2.2 Confirm:读取日志或者消息,B账户增加100元;从日志或消息中释放扣减资源
    2.3 Cancel:不做任何操作

退款服务

退货之换货举例.png
  1. 用户在app上选择退款
  2. 客服系统生成工单并进行审核,审核通过下一步
  3. 判断退款时效性,如果时效符合要求,则进行下一步,在订单系统创建退款单,这里要关联订单
  4. 如果涉及退货,则需要物流系统正常收到货之后,重新发货,或者直接退款

秒杀服务

秒杀上架前

秒杀上架前.png
  1. 一般秒杀商品上架前会有个公示期,比如半小时前提前展示,但秒杀活动未开始
  2. 定时查询需要上架的秒杀商品
  3. 封装秒杀商品信息到redis
  4. 设置秒杀商品库存,可以用redis信号量

秒杀

  1. 秒杀页面缓存到CDN
  2. 前端秒杀验证码验证
  3. nginx动静分离
  4. 网关系统sentine限流,可以通过ip限流等
  5. 用户秒杀到秒杀服务,秒杀服务会校验合法性,获取redis锁,然后扣减库存,然后发MQ,比如rocketmq是有事务保证。也可以监听redis aof日志做对账
  6. 订单服务消费MQ生成订单

对账服务

对账系统保证账务一致性

对账系统数据库和ES一致性保障

数据聚合


参考文章

上一篇 下一篇

猜你喜欢

热点阅读