0

我有x臺機器,我想選擇1來完成特定的工作(主要機器)。我有一個數據庫,這是這些機器唯一的共享資源,沒有機器間通信機制。領導者選擇

爲了選擇一臺機器,我正在考慮給db寫一個值,並選擇先選擇哪個成功(比如說M1)。 M1定期更新數據庫以說明它的存在。當M1死亡時,看到M1最近沒有更新DB的其他機器會嘗試寫入db以承擔主機角色。

在任何給定的時間點,我可以讓機器向db寫入什麼值,所以每臺機器都會嘗試寫入相同的值?如果所有機器中的時鐘都是同步的,我可能需要YYMMDDHHMM。但情況可能並非如此。

任何指針/想法?

+0

爲什麼每臺機器都寫相同的值?當然,M1必須寫出與M2所寫的不同的東西,所以M2知道M1首先到達那裏。 – 2012-08-03 11:31:40

+1

你不能使用DBMS的功能來查詢服務器本身的時間嗎? – 2012-08-03 12:43:36

+0

@ReinierTorenbeek,謝謝,我不知道爲什麼我沒有想到這一點。 – Sam 2012-08-03 17:28:55

回答

1

您可以使用DBMS的功能來查詢服務器本身的時間,以遵循您在此處概述的方法。

爲了使這個防水,有幾個問題,你將不得不採取的,雖然護理:

  • 當檢測到當前工作節點的活力,一個寫鎖將必須在表中取得確保對工人的生氣和工作要求的測試作爲一項原子行動完成。這避免了多個工人同時提出索賠。
  • 無論何時當前工作人員更新表格以聲明其生動性,它將不得不遵循相同的鎖定機制以檢測任何其他工作人員已接管工作的情況
  • 爲了甚至知道某些其他工人已接管工作,你將需要包括某種形式的標識,因而它是可見的誰是目前做的工作

這是因爲從你的描述只是一般的話它是不完全清楚你想怎麼詳細實現該算法。

1

根據數據庫提供的鎖定語義以及檢測失敗的客戶端有多好,對於每臺計算機來說,嘗試獲取通用的獨佔鎖定可能已足夠。無論哪個機器獲得排他鎖是領導者。

+1

如果你選擇這樣做,它對調試也很有用,以便記錄何時以及哪臺機器拿起鎖。僅附加表格對此很有用。此外,確保在由於不正常關閉而導致連接丟失時測試語義。你將受到數據庫保存的支配,你會想知道沒有領導者可能會有多久。 – 2017-09-19 02:51:27