Apache Ignite Locks用于在网格中同步任意计算

时间:2017-08-15 08:31:14

标签: apache api ignite locks

我有一个简单的问题,我无法在Apache Ignite文档中找到明确的答案。

我发现Apache Ignite中有一个API来创建显式锁。我知道这些锁用于写缓存条目,这是隐式完成的。

但是,我(我是否应该)能够在我的网格中显式创建一个Lock来同步计算某些任意代码。这就是我正在考虑的事情:

  1. 请求进入我的API。
  2. 我尝试在Ignite缓存中输入锁定
  3. 如果我可以进入锁定,我会进行一些计算(只应在任何给定时间在我的一个API实例上进行)
  4. 如果我无法输入锁定,则会返回409错误代码(重复请求)
  5. 我退出锁
  6. 这样做有潜在的警告吗?我应该留意潜在的陷阱吗?

1 个答案:

答案 0 :(得分:1)

是的,您可以使用缓存锁以分布式方式输入关键部分。您可以在此处找到:https://apacheignite.readme.io/docs/distributed-locks

在这里,您可以找到有关Ignite锁的更多文档:https://www.gridgain.com/sdk/pe/latest/javadoc/org/apache/ignite/IgniteLock.html

Ignite缓存锁实现互斥,因此您可以依赖于没有两个线程或进程同时持有一个锁。您应该只确保节点使用相同缓存的副本来获取锁(缓存不是本地等),并且您的缓存是事务性的。

通常,锁用于以原子方式对缓存执行复杂操作。如果您想在不实际更改缓存的情况下使用锁定,则可能是您实际上不需要此锁定的症状,或者您应该使用您尝试在关键部分内使用的资源的某些同步机制。这取决于您尝试执行的计算。