Zookeeper將是一個很好的選項來同步動作。假定以下方法。每次需要觸發同步時,都會使用當前時間戳或某些新數據更新/同步znode。基本上,主節點更新/ sync節點的值以觸發工作節點上的操作。
工作節點將數據更改置於/同步znode。因此,每當主節點更新/同步時,工作人員都會收到通知,並且他們更新本地緩存。
此外,工人節點註冊在/ workers znode下(通過在/ workers下創建一些uuid創建臨時znode)。節點將是短暫的,因此如果工作者節點/進程死亡,則對應的臨時節點消失。工人們把手錶放在/ workers znode下,這樣他們會在新員工出現或任何現有員工消失時收到通知。此外,他們還會在/ workers下的所有臨時節點上監視數據更改。
現在一切是如何工作的:
主更新/與當前時間戳同步觸發工作者節點上同步。 所有工作人員都會收到有關/ sync節點中數據更改的通知。他們獲得/ sync節點的修改數據。 工作人員從數據庫同步它們的緩存。 工作人員在/ workers節點下更新其對應的znode。例如,ID爲4dc1efd2-01c8-11e5-bee1-08002791d032的員工更新znode/workers/4dc1efd2-01c8-11e5-bee1-08002791d032。 放置在特定於工作人員的znode上的數據是「synced_at_timestamp」(例如,synced_at_1432451046000) 每當任何工作人員更新其znode時,將通知所有其他工作人員。 所有工作人員不斷檢查/ workers下所有znode上的當前數據。 當/ workers下的所有工作節點具有相同的數據synced_at_timestamp時,它們將切換到IDLE狀態。
可能有許多其他可能的方法。如果您熟悉memcache,redis,hazelcast等。,你也可以用它們來實現這樣一個系統。