【分布式】分布式锁的业务应用场景

梳理了分布式锁的两种常用的实现方式,接下来梳理一下日常开发中会应用分布式锁的业务场景
实现分布式锁的两种方式:
【分布式锁】Redission实现分布式锁
【分布式锁】Redis实现分布式锁
分布式锁在分布式系统中扮演着至关重要的角色,用于解决在多个服务或进程间对共享资源的安全访问问题。以下是分布式锁使用的一些具体业务场景:

1. 库存扣减
在电商或零售业务中,多个用户可能同时尝试购买同一商品。为了防止库存超卖,需要在扣减库存时加锁。分布式锁可以确保在同一时间内只有一个服务实例能够执行库存扣减操作。

因为小T刚接手项目,正在吭哧吭哧对熟悉着代码、部署架构。在看代码过程中发现,下单这块代码可能会出现问题,这可是分布式部署的,如果多个用户同时购买同一个商品,就可能导致商品出现 库存超卖 (数据不一致) 现象,对于这种情况代码中并没有做任何控制。

原来一问才知道,以前他们都是售卖的虚拟商品,没啥库存一说,所以当时没有考虑那么多…

这次不一样啊,这次是售卖的实体商品,那就有库存这么一说了,起码要保证不能超过库存设定的数量吧。

小T大眼对着屏幕,屏住呼吸,还好提前发现了这个问题,赶紧想办法修复,不赚钱还赔钱,老板不得疯了,还想不想干了~

2. 订单处理
在订单处理系统中,可能需要对订单状态进行更新,如从“待支付”变为“已支付”。如果多个服务实例同时处理同一个订单,可能会导致订单状态不一致。使用分布式锁可以确保在同一时间内只有一个服务实例能够修改订单状态。

小T下面的一位兄弟正在压测,发现个小问题,因为在终端设备上跟鹅厂有紧密合作,调用他们的接口时需要获取到access_token,但是这个access_token过期时间是2小时,过期后需要重新获取。

压测时发现当到达过期时间时,日志看刷出来好几个不一样的access_token,因为这个服务也是分布式部署的,多个节点同时发起了第三方接口请求导致。

虽然以最后一次获取的access_token为准,也没什么不良副作用,但是会导致多次不必要的对第三方接口的调用,也会短时间内造成access_token的 重复无效获取(重复工作)。

3. 分布式事务
在需要跨多个服务或数据库进行事务操作的场景中,分布式锁可以用来协调事务的提交或回滚。例如,在转账操作中,需要确保源账户扣款和目标账户加款两个操作要么都成功,要么都失败。分布式锁可以帮助实现这种跨服务的事务一致性。

4. 缓存一致性
在分布式缓存系统中,多个服务实例可能会同时访问和修改缓存中的数据。为了防止缓存击穿、缓存雪崩或缓存不一致的问题,可以使用分布式锁来控制对缓存的访问和修改。例如,在更新缓存中的数据时,先加锁,更新完成后再释放锁,确保同一时间只有一个服务实例能够修改缓存数据。

5. 分布式任务调度
在分布式任务调度系统中,可能需要确保同一任务不会在多个节点上同时执行。使用分布式锁可以锁定任务的执行权,确保任务的原子性执行。例如,在定时任务系统中,使用分布式锁来防止同一任务的多个实例同时运行。

6. 分布式配置管理
在微服务架构中,配置中心用于管理服务的配置信息。当配置信息发生变更时,需要通知所有服务实例进行更新。为了防止配置更新过程中的冲突和不一致问题,可以使用分布式锁来控制配置更新的顺序和一致性。

7. 分布式会话管理
在分布式系统中,用户的会话信息可能分布在多个节点上。为了确保用户会话的一致性和安全性,可以使用分布式锁来控制对会话信息的访问和修改。例如,在用户登录时,使用分布式锁来确保同一时间只有一个节点能够处理登录请求并更新会话信息。

8. 分布式资源分配
在需要分配有限资源的场景中(如IP地址、端口号等),可以使用分布式锁来确保资源的合理分配和避免冲突。例如,在容器云平台中,使用分布式锁来管理IP地址的分配,确保每个容器实例都能获得唯一的IP地址。

这些业务场景只是分布式锁应用的一部分例子,实际上,在任何需要跨多个节点或进程进行同步操作的分布式系统中,分布式锁都可能成为解决同步问题的关键工具。

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值