zookeeper分布式锁设计(二)

2018-04-16  本文已影响0人  totohui

前面的设计有一个缺点就是锁的粒度比较大。举个例子,有个商品服务-检查库存,订单服务-创建订单,只有当库存大于订单里的商品数量时,才创建订单。

上面的设计缺陷是,无论订单的商品是否相同,都去获得同一个锁,实际上,不同的商品应该申请不同的锁。

/locks/distributed_lock -->/locks/distributed_lock[id]

locks是总节点,永久节点;distributed_lock[id]必须为临时节点,这样在session异常断开的情况下,可以释放锁。

在AdvancedDistributedLock里需要把原来的计数器

// 用于挂起当前请求,并且等待上一个分布式锁释放

private static CountDownLatch zkLatch = new CountDownLatch(1);

更改为

private static Map<String, CountDownLatch> zkLatchMap = new HashMap();

上一篇 下一篇

猜你喜欢

热点阅读