在单体架构中,多个线程都是属于同⼀个进程的,所以在线程并发执⾏时,遇到
资源竞争
时,可以利⽤
ReentrantLock
、
synchronized
等技术来作为锁,来控制共享资源的使⽤。
⽽在分布式架构中,多个线程是可能处于不同进程中的,⽽这些线程并发执⾏遇到资源竞争时,利⽤ReentrantLock、synchronized等技术是没办法来控制多个进程中的线程的,所以需要分布式锁,意思就是,需要⼀个
分布式锁⽣成器
,分布式系统中的应⽤程序都可以来使⽤这个⽣成器所提供的锁,从⽽达到多个进程中的线程使⽤同⼀把锁。
⽬前主流的分布式锁的实现⽅案有两种:
-
zookeeper :利⽤的是zookeeper的临时节点、顺序节点、watch机制来实现的,zookeeper分布式锁的特点是 ⾼⼀致性 ,因为zookeeper保证的是 CP ,所以由它实现的分布式锁更可靠,不会出现混乱
-
redis :利⽤redis的setnx、lua脚本、消费订阅等机制来实现的,redis分布式锁的特点是⾼可⽤,因为redis保证的是 AP ,所以由它实现的分布式锁可能不可靠,不稳定(⼀旦redis中的数据出现了不⼀致,可能会出现多个客户端同时加到锁的情况)