本系列主要介绍分布式锁相关内容及实现。本文主要介绍以下内容:

  • 1.分布式锁是什么
  • 2.分布式锁约束
  • 3.分布式锁实现方式

1.分布式锁是什么

分布式锁,是控制分布式系统中访问共享资源的一种方式,如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。

在单机应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,我们用java内置的各种锁就可以解决这个问题,此时,所有的请求,都是在当前服务器的jvm中,共享变量在同一个内存中。

而在分布式环境下,我们要操作的变量,会处在不同的jvm中,在不同的内存中,不存在共享和可见性,这使得单机模式下的控制策略不再适用。

为了解决这个问题,我们需要一种,可以跨jvm跨服务的互斥机制来控制共享资源的访问,这就是分布式锁需要解决的问题。

2.分布式锁约束

分布式锁,需要满足以下几个基本的约束条件:

2.1互斥性

在任意时刻,只能有一个客户端持有锁;

2.2安全性

保证不出现死锁,在实际场景中,很有可能,一个客户端获取锁后,由于服务崩溃或者其他原因,导致锁没有释放,此时就会出现资源的死锁,所以,我们需要保证锁在任何情况下,都可以得到释放。

2.3对称性

加锁和解锁,必须是同一个客户端,解锁时,不能把别人加的锁给解锁了。

2.4高可用

提供锁服务的这个服务,自身必须高可用,需要考虑自身挂掉的可能性,不能因为自己挂掉了,导致系统无锁服务可用。

3.分布式锁实现方式

目前常见的有以下几种实现方式,后面会单独实现:

3.1基于数据库实现

3.2基于Redis实现(或Redisson实现)

3.3基于ZooKeeper实现(或Curator实现)

理论上讲,没有哪种实现方式,是完美的,是可以满足一切业务需求的,具体的技术选型,需要根据业务来做具体选择。