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