我試圖完成一些在概念方面很容易理解的東西。我想在不同的機器之間同步一段java代碼。在不同機器上運行的程序有兩個實例不能同時運行。分佈式同步執行
我聽說過zookeeper,jgroups和akka,但是在閱讀文檔時,對於我想要做的事情,似乎有點矯枉過正。有沒有人有任何想法,如果有什麼更直接的使用?
由於提前,
銳
我試圖完成一些在概念方面很容易理解的東西。我想在不同的機器之間同步一段java代碼。在不同機器上運行的程序有兩個實例不能同時運行。分佈式同步執行
我聽說過zookeeper,jgroups和akka,但是在閱讀文檔時,對於我想要做的事情,似乎有點矯枉過正。有沒有人有任何想法,如果有什麼更直接的使用?
由於提前,
銳
我認爲Hazelcast的分佈式鎖(http://docs.hazelcast.org/docs/3.6/manual/html-single/index.html#lock)可能會有所幫助。 Hazelcast相對輕量級,所以應該不會矯枉過正。
謝謝。我相信你的解決方案符合我想要做的。 – rpvilao
如果你提到的(也看看Terracotta)是你的需求,也許簡單的數據庫鎖定太複雜了所有的技術?
SELECT FOR UPDATE
語句將鎖定給定的數據庫記錄,使其他客戶端運行此查詢來阻止。簡單,但安全可靠。
非常非常基本的解決方案是使用RMI。
決定使用一臺機器作爲主機,該機器有一個使用鎖的方法,只允許一個方法調用者通過。
在運行特殊的Java代碼塊之前,您必須通過RMI從所有其他從屬實例調用此特殊方法。
「在不同機器上運行的程序有兩個實例不能同時運行。」這兩個程序的任何協調員都必須存儲有關這些程序執行情況的狀態。有什麼選擇可用於此目的? –
我不確定我明白這個問題。我不擔心運行實例的狀態。我只是擔心他們不會同時處理數據。 – rpvilao
如果你擔心這些進程是否同時處理數據,那麼必須有一些通信協議可以反映某個協調器的進程狀態。或者協調員必須能夠在不請求這些信息的過程的情況下確定這一點,這需要協調員在某處存儲此信息。無論哪種情況,負責同步的協調員都必須存儲整個系統的同步狀態。 OS,JVM等通過跟蹤信號量,互斥鎖等的使用並存儲此信息來完成此操作。 –