2

什麼技術/工具可以被用來實現這些要求的分佈式系統:同步行動

  • 在給定的時間,系統可以在3狀態之一:同步,計算,或IDLE。

  • 系統中的每個節點都可以接收兩條指令:sync()和compute()。

  • sync()指令將一次發送到所有節點。在獲得sync()指令後,如果系統是空閒的,則每個節點應將其本地緩存與數據庫同步,並將系統狀態更改爲SYNCING。當所有節點完成同步時,系統狀態將更改爲IDLE。在節點發生故障的情況下,只要所有活動節點完成同步,系統狀態仍應該更改爲IDLE。

  • 獲得compute()指令後,如果系統不是SYNCING,則節點將運行一些計算,系統狀態應更改爲COMPUTING。當計算完成時,或者在節點發生故障的情況下,如果沒有其他計算正在進行,則狀態應該變爲空閒狀態。

回答

2

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等。,你也可以用它們來實現這樣一個系統。

0

這可以用RabbitMQ完成,併爲不同的消息指定傳遞收據選項。應該將sync消息傳遞給所有節點,而compute消息應該由第一個節點確認才能看到它。