分布式相关内容

重复提交【接口幂等性】

接口的作用:幂等性防止接口重复提交

实现接口幂等性的方式:

方式一:通过令牌校验的方式

方式二:通过分布式锁的方式

分布式事务和分布式锁

当一个资源可能被争抢时,就需要使用分布式锁,防止超卖/重复提交现象发生

例如:假如支付接口,需要在钱包中扣钱;此时,支付接口所在的服务有两个节点,用户点击两次支付,两个接口都会执行支付操作;此时钱包就会被争抢,需要使用分布式锁,防止钱包金额变成负数

在购买完成后,订单表会自增加一条记录,商品表记录会减少商品数量,钱包会减少金额,此时就涉及到分布式事务

分布式事务和普通事务的原子性要求是一样的:要么全部成功,要么全部失败;此时当业务发生异常时,就需要全部回滚;

被争抢的资源如何分类

资源分为个人资源和公有资源

如果是用户个人的资源需要,先锁定预扣除

如果是公用的资源,需要先完成前置逻辑,再锁定扣除;如果先行逻辑执行完成,公用资源消耗完毕或者失败,需要补偿个人资源

首先指定一个场景

假设一个商城系统发起一个秒杀活动,活动中的商品是手表,共有100块,每块秒杀价50元

此时共有10000个用户发起秒杀,每个用户有1-100元范围的资产,有百分之90的用户资产低于50元

图一:此时所有的用户争抢分布式锁,但是只有一个人可以拿到分布式锁,其他 9999 人都需要等待;如果此时拿到分布式锁的人没有支付能力,那么将会造成订单流失

图二:此时所有的用户都需要预扣除钱包,扣除成功后才可以获取手表库存的分布式锁;此时可以支撑 1个人拿到分布式锁,其他人只能等待或退出秒杀操作;系统依然会造成订单流失【预扣除机制

图三:此时可以支

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Java八股文+场景题 文章被收录于专栏

针对Java简历中项目的功能进行提问,大家可以在评论区中解答/讨论;同时提供八股文

全部评论

相关推荐

1 1 评论
分享
牛客网
牛客企业服务