分布式锁
在分布式环境中,为了保证数据的一致性,经常在程序的某个运行点(例如,减库存操作或流水号生成等)需要进行同步控制。以流水号生成为例,普通的后台应用通常都是使用时间戳方式来生成,但是在用户并发量非常大的情况下,可能会出现并发问题,下面来演示下如何出现以及解决问题。
时间戳生成的并发问题
|
|
从输出结果可以看出订单号有很多的重复。
使用Curator实现分布式锁
|
|
分布式计数器
有了上述分布式锁的基础之后,我们就很容易基于其实现一个分布式计数器,基于Zookeeper的分布式计数器的实现思路叶非常简单:指定一个Zookeeper节点作为计数器,多个应用实例在分布式锁的控制下,通过更新该数据节点的内容来实现技术功能。
分布式Barrier
Barrier时一种用来控制多线程之间同步的经典方式,JDK中也自带了CyclicBarrier实现。下面分别看下JDK的实现和Zookeeper的实现。
JDK自带的CyclicBarrier实现
|
|
分布式Barrier实现
|
|