2017-08-15 67 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

點燃緩存鎖實現互斥,所以你可以依靠,沒有兩個線程或進程正在舉行一個鎖同一時間。您應該確保節點使用同一緩存的副本獲取鎖(緩存不是本地等),並且緩存是事務性的。

通常使用鎖來自動執行對緩存的複雜操作。如果你想在不實際改變緩存的情況下使用鎖定,那可能是你實際上並不需要這個鎖的症狀,或者你應該使用你正在試圖在關鍵部分內部使用的資源的一些同步機制。這取決於你正在執行的計算。