当前位置: 代码迷 >> 综合 >> 分布式锁解决方案实战
  详细解决方案

分布式锁解决方案实战

热度:77   发布时间:2024-03-10 01:30:52.0

分布式锁解决方案实战

1 为什么要学习分布式锁解决方案
为了解决分布式架构带来的数据准确性问题!
我们用synchronized或者 ReentrantLock 能解决问题吗?
真实生产环境我们采用集群的方式去访问秒杀商品(nginx为我们做了负载均衡)。就会看到数据不一致的现象。如synchronized关键字的作用域其实是一个服务器进程(其实就是当前项目进程),在这个进程下面的所有线程都能够进行加锁。但是多进程就不行了。对于秒杀商品来说,这个值是固定的但是每个地区都可能有一台服务器。这样不同地区服务器不一样,地址不一样,进程也不一样。因此synchronized无法保证数据的一致性,这也是为什么要学习分布式解决方案的原因.
2 分布式锁需要满足的几点
1.互斥;任何时刻只能有一个client获取锁。
2.释放死锁;即使锁定资源的服务崩溃或者分区,仍然能释放锁,防止死锁。
3.容错性;只要多数节点(一半以上)在使用,Client就可以获取和释放锁。
4.确保客户端只能解锁自己持有的锁。
5.具备可重入特性。
3 synchronized锁在分布式情况下案例
面我们提到synchronized不能保证分布式架构部署下数据的准确性问题,接下来我们以一个案
例来描述,后续我们也会使用正确的分布式锁来解决这个案例需求。
3.1 需求
多服务负载均衡下,通过高并发访问(商品秒杀)来进行创建订单和库存的削减,保证库存的正确扣除,不会出现超买现象。
1.数据库脚本的代码如下?

  相关解决方案