关注
7. 100万张代金券,要把代金券发给上亿的用户,你会怎么设计这个系统?
其实就是一个库存扣减的问题,如果是为了保证库存扣减的准确性,我们设计的一个链路最好不要太长和复杂。同时也不考虑把库存放在redis里,因为redis中的异步复制和持久化机制可能会导致数据不一致的问题。所以我想的是直接操作数据库进行扣减,然后引入一个消息队列作为一个削峰的作用避免数据的访问量过高。引入消息队列的话就还需要考虑到一个消费的幂等性处理。所以整个链路应该就是用户点击领取代金卷的时候,先把用户id投递到消息队列中,然后我们后端服务器执行一个消费,消费逻辑就是开启一个数据库事务(先尝试在一张用户表中插入一条整个用户的记录——利用用户id是唯一键的特性,如果插入成功了再执行扣减库存的操作),事务提交成功了再响应用户。
缺点:整个系统处理高并发请求的时候响应会比较慢。优点:保证了库存扣减的强一致性。
其实整个取舍就是CAP理论中的C和A的取舍吧.
查看原帖
点赞 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 在大厂上班是一种什么样的体验 #
4051次浏览 64人参与
# 找工作的破防时刻 #
251414次浏览 1950人参与
# 程序员找工作至少要刷多少题? #
8502次浏览 132人参与
# OPPO求职进展汇总 #
770774次浏览 5396人参与
# 刚入职的你踩过哪些坑 #
3891次浏览 87人参与
# 我的AI电子员工 #
26021次浏览 159人参与
# 为了减少AI幻觉,你注入过哪些设定? #
1667次浏览 53人参与
# 你投递的公司有几家约面了? #
157718次浏览 995人参与
# 论秋招对个人心气的改变 #
5465次浏览 98人参与
# 程序员能干到多少岁? #
5467次浏览 85人参与
# 一张图晒一下你的AI员工 #
2697次浏览 61人参与
# 牛客AI体验站 #
2905次浏览 81人参与
# 我现在比当时_,你想录用我吗 #
3448次浏览 59人参与
# 牛客租房专区 #
146627次浏览 1463人参与
# AI Coding的使用心得 #
2137次浏览 56人参与
# 关于春招/暑期实习,你想知道哪些信息? #
3634次浏览 78人参与
# 晒晒你司的新年福利 #
3739次浏览 67人参与
# 腾讯工作体验 #
563313次浏览 3688人参与
# 实习,不懂就问 #
165036次浏览 1470人参与
# 如果公司降薪,你会跳槽吗? #
138865次浏览 890人参与

查看19道真题和解析