2013-02-16 27 views
0

我必須編寫一個分佈式系統,並在四個不同節點上運行四個進程。分佈式系統應該按照以下方式工作:隨機數生成器在每個進程中生成一個隨機數。目標是通過消息在進程之間傳遞來平衡所有進程中的這些值。這樣的過程A是服務器從所有過程中獲取數字,然後命令他們將其部分數字發送到一個或多個其他過程,以平衡過程所持有的所有數字。例如,A的計數是30,B的計數是65,C的計數是35,D的計數是70.計算30 + 65 + 35 + 70 = 200除以4 = 50.現在流程A知道誰少了比平均水平和誰的平均水平更高。現在的問題是,A如何決定誰向誰發送什麼號碼?平衡所有流程的價值。請注意A不能直接指示進程減少或增加它的計數,例如它不能發送消息給B,並告訴它遞減15,然後向C發送另一個消息並告訴它增加15.必須向B發送消息,告訴B遞減15,然後發送一個消息給B給C的消息,並告訴它增加15或換句話說,它告訴B發送15你的計數C.預先感謝。扎基。爲所有進程均勻分配值的算法

回答

0

您所描述的問題被稱爲分佈式聚合。有許多解決方案適用於網絡上的不同假設(連接了哪些節點?可能會丟失信息?),計算函數(平均值?和?)等等。您可以在http://arxiv.org/abs/1110.0725找到一個很好的概述,並提供可以使用的算法。

+0

謝謝你,我發現調查報告中描述的戒指方法,你提供了一個鏈接,爲我工作。 – Zaki 2015-01-02 13:28:54

1

對於我所知道的沒有一個具體的配方或者只能很好地定義模式來實現這樣的分佈式系統(同樣如果有材料提供參數的指導,請參閱問題末尾的鏈接)。 這裏涉及到各種選擇,將形成最終的系統,其可擴展性,如何將響應,如何將穩固等。

您將問題標記爲語言不可知的。我相信,好的概念不僅僅是技術,而是最終必須做出選擇,而像這樣的系統太複雜,不能用你不熟悉的語言來構建。

我會用C#構建它,因爲它是我的主要開發語言,所以我的技術面向agile development

  1. 首先,我會盡力繪製一個宏觀建築設計,突出參與演員和他們的責任(但不打算過多的細節)。
  2. 然後,我會嘗試編寫第一個簡單原型,涉及兩個節點。
  3. 當原型工程時,我會嘗試找到薄弱點並讓它與四個節點一起工作。
  4. 如果有問題,請重複上一點直到它滿足要求

進一步細化,你甚至可以使用原始插座來編譯它;但爲了保持簡單建議你發現在系統上HTTP protocol(例如使用.NET BCL HttpListenerHttpClient組件的基礎上)進行通信:

  1. 一組預定義消息GET可以執行對等服務器之間的同步。
  2. POST消息可用於在隨機數上交換數據。

關於數字世代,它打開了一個全新的世界。我會依賴一個外部服務,如ANU Quantum Random Server(如果您可以計算一個活動的Internet連接)。我知道你說過你有一個算法來實現,我提供這個作爲替代(我不知道這部分是否可以改變)。

至於最少的事情,我建議你閱讀this articlethis對等網絡如果您將使用.NET框架。

+0

謝謝你的評論周杰倫。然而,我正在尋找的是算法,以促進均勻分佈,如上所述。無論如何我不擔心執行(或隨機數生成)。 – Zaki 2015-01-02 11:30:57