设计方案Java技术升华面试精选

业务场景实战(一)美团到家商品库存演进

2022-01-10  本文已影响0人  后来丶_a24d

目录


系列总目录


架构演进

架构演进图.png

防超售

单元化

平台化


防超卖

Mysql同步实现防超卖

  1. 库存交易服务使用Mysql同步扣减库存,DTS(开源可以用canal)监听增量binlog, 监听到binlog后库存异步服务记录库存流水。
  2. 库存异步服务会校验流水如果校验失败,则会进行补偿处理,当然如果库存交易服务异常也会发补偿消息,库存异步服务进行补偿处理。
  3. mysql这种解决方案,会有流水校验失败的情况之一: 调用库存服务的上游socket超时导致的不一致,又没用分布式事物。

Redis同步实现防超卖

  1. 库存交易服务同步lua脚本到redis,然后扣减成功发送流水MQ,如果提交异常则发补偿MQ。
  2. 库存流水服务监听redis的AOF库存流水,然后批量聚合到mysql。

一致性

Mysql同步实现防超卖的一致性

  1. 如果binlog积压或者DTS故障导致redis,库存异步服务数据老旧,可以通过延迟处理解决,DTS可以通过双通道(如图DTS一个主通道,美团BCP备用通道)保证。
  2. 如果redis,库存异步服务数据丢失,那就重新加载,库存异步服务有个校验线程。

Redis同步实现防超卖的一致性

  1. redis集群主从可能会有主从不一致的情况,比如master更新后master的AOF还没来得及同步给slave,master宕机,slave升级为master。可通过双通道流水校验,库存校正处理。当然长远来看最好的方式是重构Redis raft协议,但这成本相对比较大。
  2. redis某个IDC下集群完全宕机,这时触发库存不存在,双通道校验,不存在重新加载修正。

参考文章

上一篇 下一篇

猜你喜欢

热点阅读