分布式锁服务[关闭]分布式锁服务[关闭](Distributed Lock Service [clo

2019-05-14 02:53发布

其中分布式锁服务将使用?

要求是:

  1. 甲互斥(锁定),可以从不同的工艺/机器中可以看出
  2. 锁定...发布语义
  3. 一定超时后自动解锁 - 如果锁持有人死亡,它会自动X秒后释放
  4. Java实现
  5. 很高兴有:.NET实现
  6. 如果它是免费的:死锁检测/缓解
  7. 易部署,请参阅下面的注释。

我不感兴趣,喜欢“它可以通过一个数据库来完成”,或“它可以通过JavaSpaces的做”的答案 - 我知道。 我感兴趣的是一个准备好了,出的现成的可靠实现。

Answer 1:

陶土 ,包括开源版本,已经分发通过使用锁定语义synchronizedjava.util.concurrent.ReentrantReadWriteLock -后者显然是适合您的需求。


更新

由于现在的问题加入GigaSpaces的混合“的要求,我会说的混合。 它只是将更多的复杂性添加到您的技术堆栈,并努力:

  • 整合,在代码和基础设施方面;
  • 管理它们之间的同步;
  • 学习/调整/调试陶土。

将更好地用于创造或实现基于GigaSpaces的锁定解决方案。



Answer 2:

块上的一个新的孩子是hazelcast 。 我一直在玩它,它是非常简单的使用和配置。

据我所看到的不应该有GigaSpaces的和hazelcast之间的任何冲突,因为hazelcast没有任何相关性,即没有jgroups.jar等

Hazelcast:

  1. 互斥(锁定),没错实施java.util.concurrency.locks.Lock
  2. 自动锁释放一定超时后,没错所有的锁,如果一个成员离开集群发布
  3. Java实现,没错
  4. 很高兴有:.NET实现,都能跟得上是一个纯Java的解决方案,可能可以移植到J#
  5. 如果它是免费的:死锁检测/缓解,都能跟得上不设法我Hazelcast来处理这个
  6. 易于部署,它是一个单一的罐子一个配置文件,部署应用程序的一部分,不需要额外的过程


Answer 3:

看看Apache的动物园管理员 (Hadoop的子项目) -它提供了分布式同步。 该文档是不是很大,但什么也使得它看起来一个有趣的产品 - 检出食谱如何使用动物园管理员的想法。

这是级别低于你可能想和它确实需要额外的部署,因为它建议的专用服务器。

您可以模拟不同的锁定策略和它确实提供了一个锁定支架死亡(短暂的节点)的解决方案。



Answer 4:

我建议使用Redisson这是一个Redis的基于内存数据网格。 它实现了熟悉的Java数据结构包括分布式java.util.Lockjava.util.concurrent.ReentrantReadWriteLock对象。 包括能力设置leaseTime。 Lock使用示例:

Redisson redisson = Redisson.create(config);

Lock lock = redisson.getLock("anyLock");
try {
   // unlock automatically after 10 seconds of hold
   lock.lock(10, TimeUnit.SECONDS);

} finally {
   lock.unlock();
}

...

redisson.shutdown();

支持云计算厂商,如Azure和AWS。



Answer 5:

动物园管理员成为分布式锁定的帮助下成为事实上的标准的Apache馆长框架。 查核在锁食谱以获取更多信息。



Answer 6:

Oracle Coherence的,这是非常稳定和成熟,包括互斥支持:

cache.lock(key, -1);
try {
  // ..
} finally {
  cache.unlock(key);
}

锁生存服务器故障,滚动重新开始,等等。

为了充分披露的缘故,我在甲骨文工作。 的意见和在这篇文章表达的观点都是我自己的,不一定反映我的雇主的意见或观点。



文章来源: Distributed Lock Service [closed]