其中分布式锁服务将使用?
要求是:
- 甲互斥(锁定),可以从不同的工艺/机器中可以看出
- 锁定...发布语义
- 一定超时后自动解锁 - 如果锁持有人死亡,它会自动X秒后释放
- Java实现
- 很高兴有:.NET实现
- 如果它是免费的:死锁检测/缓解
- 易部署,请参阅下面的注释。
我不感兴趣,喜欢“它可以通过一个数据库来完成”,或“它可以通过JavaSpaces的做”的答案 - 我知道。 我感兴趣的是一个准备好了,出的现成的可靠实现。
其中分布式锁服务将使用?
要求是:
我不感兴趣,喜欢“它可以通过一个数据库来完成”,或“它可以通过JavaSpaces的做”的答案 - 我知道。 我感兴趣的是一个准备好了,出的现成的可靠实现。
陶土 ,包括开源版本,已经分发通过使用锁定语义synchronized
或java.util.concurrent.ReentrantReadWriteLock
-后者显然是适合您的需求。
更新
由于现在的问题加入GigaSpaces的混合“的要求,我会说的不混合。 它只是将更多的复杂性添加到您的技术堆栈,并努力:
将更好地用于创造或实现基于GigaSpaces的锁定解决方案。
块上的一个新的孩子是hazelcast 。 我一直在玩它,它是非常简单的使用和配置。
据我所看到的不应该有GigaSpaces的和hazelcast之间的任何冲突,因为hazelcast没有任何相关性,即没有jgroups.jar等
Hazelcast:
java.util.concurrency.locks.Lock
看看Apache的动物园管理员 (Hadoop的子项目) -它提供了分布式同步。 该文档是不是很大,但什么也使得它看起来一个有趣的产品 - 检出食谱如何使用动物园管理员的想法。
这是级别低于你可能想和它确实需要额外的部署,因为它建议的专用服务器。
您可以模拟不同的锁定策略和它确实提供了一个锁定支架死亡(短暂的节点)的解决方案。
我建议使用Redisson这是一个Redis的基于内存数据网格。 它实现了熟悉的Java数据结构包括分布式java.util.Lock
和java.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。
动物园管理员成为分布式锁定的帮助下成为事实上的标准的Apache馆长框架。 查核在锁食谱以获取更多信息。
Oracle Coherence的,这是非常稳定和成熟,包括互斥支持:
cache.lock(key, -1);
try {
// ..
} finally {
cache.unlock(key);
}
锁生存服务器故障,滚动重新开始,等等。
为了充分披露的缘故,我在甲骨文工作。 的意见和在这篇文章表达的观点都是我自己的,不一定反映我的雇主的意见或观点。