抢单设计
- 系统启动,将当天的Express加入到Redis,设置过期时间一天
- 订单更新,将之前的key过期,插入一条新的
- 有人抢单,添加分布式锁,将该key过期
- mq更新mysql,创建订单
秒杀设计
-
系统启动,将商品信息加入redis
-
加Redis分布式锁,对Redis数量进行更新,如果小于0返回失败,如果大于0进行下一步
-
将消息发送到mq,更新mysql,创建订单
-
出现的问题:
-
如何保证发送成功
-
消费者失败了怎么办
-
分布式事物
- CAP原则,不可能同时满足
- 一致性Consistentcy
- 可用性 Availablility
- 分区容错性 Partition tolerance
- BASE理论
- 基本可用 Basically Available
- 软状态Soft State
- 最终一致性 Eventually consistent
- 解决方案
- 两段式提交2PC
- TCC 补偿事物
- 本地消息表
- RocketMQ