2017-08-15 56 views
0

我有一个简单的问题,我无法在Apache Ignite文档中找到确切的答案。Apache Ignite锁定用于同步网格上的任意计算

我看到Apache Ignite中有一个API用于创建显式锁定。我知道这些锁用于写入缓存条目,并且这是隐式完成的。

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

  1. 请求进入我的API。
  2. 我尝试在我点燃缓存
  3. 进入锁定如果我能进入我做一些计算(这应该只对我的API实例之一在任何给定时间内完成)锁
  4. 如果我能”牛逼输入锁,我返回409错误代码(重复的请求)
  5. 我退出锁定

是否有可能需要指出来这样做呢?我应该注意潜在的隐患吗?

+0

是否要为每个计算创建一个单独的锁?或者一个计算完成后,另一个被允许在同一个锁上执行? –

+0

每个请求一个锁。每个请求都允许将5个字段连接在一起成为锁定缓存键。但是一旦关键部分完成并且锁定退出,则不会再次使用。我保留对缓存本身的引用,所以我不必在每次请求时重新创建/检索它。 – DKhanaf

+0

听起来像你可以通过群集单例实现:https://apacheignite.readme.io/docs/cluster-singletons –

回答

1

是的,您可以使用缓存锁来以分布式方式输入临界区。在这里你可以找到如何:https://apacheignite.readme.io/docs/distributed-locks

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

点燃缓存锁实现互斥,所以你可以依靠,没有两个线程或进程正在举行一个锁同一时间。您应该确保节点使用同一缓存的副本获取锁(缓存不是本地等),并且缓存是事务性的。

通常使用锁来自动执行对缓存的复杂操作。如果你想在不实际改变缓存的情况下使用锁定,那可能是你实际上并不需要这个锁的症状,或者你应该使用你正在试图在关键部分内部使用的资源的一些同步机制。这取决于你正在执行的计算。