1 介绍

前面的文章我们介绍了分布式系统和它的CAP原理:一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)参考这篇《分布式事务

我们知道,一个分布式系统无法同时满足三个特性,所以在设计系统之初,就有一个特性要被妥协和牺牲,因为分区容错性的不可或缺性,一般我们的选择是AP或者CP,这就要求我们要么舍弃强一致性,要么舍弃高可用。

为了达到数据的一致性,或者说至少达到数据的最终一致性,我们需要一些额外的方法来保证,比如分布式事务,分布式锁等等。

2 关于分布式锁

在单体系统中,我们经常会遇到很多高并发的场景,比如热点数据、热点缓存,短时间会有大量的请求进行访问,当多个线程同时访问共享资源的时候,就可能产生数据不一致的情况

为了保证操作的顺序性、原子性,所以我们需要辅助,比如在线程间中加锁,当某个线程得到资源的时候,就对当前的资源进行加锁,等完成操作之后,进行释放,其他线程就可以继续使用了。

Java在多线程实现中,专门提供了一些锁机制来保障线程的互斥同步(synchronized/ReentrantLock)等。

 1 synchronized(object:this){
 2    // todo 业务逻辑
 3 }
 4 ====================================
 5 Lock lock = new ReentrantLock();
 6 Condition condition = lock.newCondition();
 7 lock.lock();
 8 try {
 9  while(这边是条件表达式) {
10    condition.wait();
11    // todo 业务逻辑 
12   }
13  } finally {
14     lock.unlock();
15 }
01-14 22:06