核销优惠券过程中的缓存DB一致性问题
来源:6-2 优惠券分发微服务业务思想
慕先生5575819
2020-09-01
老师,核销场景下,我们的流程是校验 --> 改缓存 --> 发消息 --> 回写DB,如果我们改缓存时就失败了,用户使用优惠券失败,生产上会怎么处理?
如果缓存改完了,网络抖动或其他原因导致发消息没发出去,这时候DB 缓存的不一致怎么解决?
或者消息发出去了但是消费失败怎么办?
还有个问题是,就是大多数使用缓存的场景都是用缓存来读数据,写操作放在 DB,操作缓存也是先删缓存再写数据库,这样的方案有比较成熟的处理缓存DB一致性方案,我们这个直接基于缓存写的方案的最终一致性过度依赖于消息中间件的不出错,这样的方案安全吗?是不是我们的系统是基于秒杀这种特殊场景设计的优惠券方案呀?
写回答
1回答
-
张勤一
2020-09-01
同学你好:
你这个问题提的非常好,确实是存在各种失败的可能。其实在企业级开发中,这些问题也是可能出现的:
1. 修改缓存直接失败了,那么,这次操作就算做是失败了
2. 在使用缓存的情况下,也是缓存和 DB 同时都去写,很少会去读 DB
3. 日志和报警都是需要我们来做的,在出错之后及时的报警,然后进行人工的干预处理
欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!
10
相似问题