关注
(秒杀问题中的一个方向,不一定是面试官真问的)
订单系统 和 商品库存系统 可能不在一个数据库或一个服务器上,不能用数据库事务完成,你必须自己保证两个系统的一致性,也就是要么订单创建成功、库存扣减也成功,要么两者都失败。如果库存扣完了,但订单创建失败,那你要保证库存加回来、且订单一定不会创建成功(至少之后要删掉它)(因为要及时响应用户,一直等订单服务响应是不可能的)。这个是典型的分布式事务问题。
难点在于,如果请求订单服务超时(不是直接返回插入失败),服务器短时间没法知道请求是失败了(订单不会创建成功),还是请求没有失败、只是被延迟了(订单之后又成功更新了)。
最简单的方法应该是,服务器重试几次、允许等一小段时间,如果还是超时或请求失败,就直接返回下单失败,撤销库存更新;然后开一个定时任务定期给订单服务发补偿信息(删除订单或标记订单无效,如果是库存服务超时就是加库存)直到这个消息被成功处理。
服务器的插入请求和补偿请求必须满足幂等性:重发插入请求不会导致一个订单被插入多次;重复发补偿不会导致订单被删多次(对库存服务就是库存被加多次)。并且要注意在订单真的创建后,才执行这个补偿。
查看原帖
5 4
相关推荐
迷茫的大四🐶:潮水褪去,才知道谁没穿内裤
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 第一次找实习,我建议__ #
7094次浏览 90人参与
# 如果今天是你的last day,你会怎么度过? #
39095次浏览 261人参与
# 联影求职进展汇总 #
93595次浏览 472人参与
# 从mentor身上学到了__ #
7788次浏览 109人参与
# 秋招暂停,我将对以下公司做出处罚__ #
12812次浏览 60人参与
# 你听到的“最没用”的秋招建议 #
12959次浏览 153人参与
# 360集团校招 #
58089次浏览 236人参与
# 2025秋招体验点评 #
34503次浏览 335人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
2396次浏览 17人参与
# 工作以后,你父母对你啥态度 #
5916次浏览 65人参与
# 小红书取消大小周 #
77846次浏览 180人参与
# 什么样的公司千万别去 #
8372次浏览 75人参与
# 薪资要看总包还是月薪? #
11384次浏览 128人参与
# 如果有时光机,你最想去到哪个年纪? #
59987次浏览 830人参与
# 四大天坑是哪四家? #
87619次浏览 222人参与
# 你在职场上见过哪些“水货”同事 #
11833次浏览 101人参与
# 机械人的保底公司是哪一家? #
42558次浏览 139人参与
# 选完offer后,你后悔学机械吗? #
45077次浏览 257人参与
# 非技术岗简历怎么写 #
257744次浏览 3091人参与
# 机械人值得去的半导体企业 #
30272次浏览 179人参与
# 机械人的薪资开到多少,才适合去? #
144250次浏览 519人参与
# 研究所VS国企,该如何选 #
223647次浏览 1941人参与
查看8道真题和解析