Java 分布式锁服务
您将使用哪个分布式锁服务 要求如下:Java 分布式锁服务,java,timeout,locking,distributed-lock,Java,Timeout,Locking,Distributed Lock,您将使用哪个分布式锁服务 要求如下: 可以从不同进程/机器中看到的互斥(锁) 锁…释放语义 在特定超时后自动释放锁-如果锁固定器死亡,它将在X秒后自动释放 Java实现 很高兴有:.Net实现 如果是免费的:死锁检测/缓解 易于部署,请参见下面的注释 我对“可以通过数据库完成”或“可以通过JavaSpaces完成”之类的答案不感兴趣,我知道。我对现成的、现成的、经过验证的实现感兴趣。,包括开源版本,通过使用synchronized或java.util.concurrent.ReentrantRe
synchronized
或java.util.concurrent.ReentrantReadWriteLock
,具有分布式锁定语义,后者显然符合您的需求
更新 既然现在的问题增加了与GigaSpaces“混合”的要求,我想说的是不要将它们混合。这只会给您的技术堆栈增加更多的复杂性,以及:
- 在代码和基础设施方面进行集成李>
- 管理它们之间的同步李>
- 学习/调整/调试Teracotta
最好是创建或实施基于GigaSpaces的锁定解决方案。一个新的孩子在这个街区。我一直在玩它,它的使用和配置非常简单 据我所知,Gigaspaces和hazelcast之间不应该有任何冲突,因为hazelcast没有任何依赖项,即没有jgroups.jar等 Hazelcast:
java.util.concurrency.locks.lock
Java.util.Lock
和Java.util.concurrent.ReentrantReadWriteLock
对象。包括设置租赁时间的能力<代码>锁定使用示例:
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等云供应商。Oracle Coherence非常稳定和成熟,包括互斥支持:
cache.lock(key, -1);
try {
// .. add your critical code here
} finally {
cache.unlock(key);
}
锁在服务器故障、滚动重新启动等情况下仍然有效
为了充分披露,我在甲骨文公司工作。这篇文章中表达的观点和观点是我自己的,不一定反映我雇主的观点或观点。在框架的帮助下成为分布式锁定的事实标准。查看中的锁以了解更多信息。将死锁协商添加到您的列表中:p出于我的目的,不需要它。我将添加一个很好的示例。您可能会感兴趣,这使得SqlServer内置的应用程序锁功能可以很容易地用作分布式锁服务器。假设我们已经在使用GigaSpaces,您会添加Terracotta吗?这两个人配合得好吗?这就是我现在要说的方向。准备好后将发布。有部署工作吗?我将完善我的问题——不需要进一步部署,可以使用MySql、JavaSpaces/GigaSpaces或NetApp的解决方案(非常)可取。我还没有实际部署Hazelcast,但我正在积极考虑将其用于分布式锁定。部署似乎很繁琐,因为没有外部进程,集群中的所有JVM都能解决应该做什么。他们至少需要知道彼此的存在。。。无论如何,我更喜欢(并且坚持)基于我们正在使用的现有技术的解决方案——我认为在我们已经使用GigaSpaces的情况下引入另一个集群框架是不明智的。是否可能不存在基于MySql的解决方案???是的,hazelcast使用mutlicast自动发现其成员,如果mutlicast不合适,也可以硬连接集群。如果你想用MySql锁定东西,那真的很容易,不是吗?只需从LOCK_TABLE中选择ID,其中ID=
sharedname
FOR UPDATE'FOR#2似乎并不能完全满足某些人的需求。如果一台机器上有多个工作线程,其中一个线程流氓或被卡住而没有返回锁,那么您可能仍然希望在一段时间后使该锁过期。您可能不会得到完整的服务器故障,只是在释放锁之前的线程故障。这个问题还有其他解决办法吗?AFAIU,ZooKeeper会为每次锁获取写入磁盘。这太贵了。写入预写日志是为了可恢复性。由于锁服务是分布式的,如果锁没有缓存,锁获取将导致网络旅行。与网络旅行相比,附加到磁盘的费用不是很高。Zookeepr用于许多分布式系统,如HBase。它的性能是好的。Zookeeper是低级的,但是没有解决问题的方法。这是否涵盖了所有用例问题h