0

我會用我最感興趣的情況下啓動:「標準」方法從多個設備/服務器收集數據/分配數據?

我們有多個設備(2 - 10)都需要了解 一組數據(單位:千增長到幾十萬小塊的, 稱每個100-1000字節)。 可以在任何設備上生成數據,並且我們希望每個設備都能夠獲取所有數據。(編輯:.. 最終。設備始終沒有連接和/或聯機,但它們現在和時間同步)沒有數據需要 被刪除或修改。

當然有一些天真的方法來處理這個問題,但我認爲它們都有一些主要的缺點。天真地發送一切我 必須對其他人將導致性能差,大量的舊數據 被一次又一次地發送。首先發送一個清單,然後讓其他設備請求他們缺少的數據對於小數據 不會有太大的好處。因此,也許讓每個設備記住他們與 交談的時間和用戶可能是值得的權衡?只要合作伙伴 的數量相對較少,我們上次同步的日期就不會使用那麼多的空間,但從那時起只需發送已添加的內容應該很容易。

但這都只是猜測。
這可能是一個非常廣泛的 話題,我也對這個問題整體感興趣:(分散式)版本控制可能做類似 我想要的東西,一塊 軟件同步來自用戶智能手機,平板電腦和相機到在線 存儲,等等。 雖然它們有所不同,但有很多因素,如數據大小,帶寬,一致性要求,處理能力或有多少設備在同步之間聚合了新數據等,請記住,那麼對此的理論是什麼? 我在哪裏必須尋找 論文以及有關什麼是有效的,什麼不可行的,或者每種情況都與其他所有問題不同,因爲沒有好的全面解決方案?

澄清:我不是在尋找現成的軟件解決方案/產品。這更像是什麼搜索算法用於在圖中查找路徑的問題。計算機科學書籍可能會告訴你,它取決於圖形的特徵​​(定向?加權?超圖?歐幾里德?),或者你是否最終需要每條可能的路徑或僅僅幾條路徑。不管你需要什麼,都有不同的算法。我也考慮過在https://cs.stackexchange.com/上發佈這個問題。

回答

0

在你的情況下,我會研究一個實現AMQP標準的消息服務,例如RabbitMQ或​​,每發出一個新塊,應該發送給AMQP代理,將其廣播到所有設備隊列。然後消息可能被推送給消費者或從隊列中拉出。

+0

聽起來像有一箇中央服務器或至少有一臺服務器必須始終在線。這不是我所需要的,我不是真的在尋找圖書館或框架,我對(一般)algorthims更感興趣。 – Higemaru

0

你也可以考慮Kafka從幾個生產者到幾個消費者的數據流。其他可能性是ZeroMQ。這取決於您的具體需求

+0

從鏈接的Kafka頁面:「數據流實時高效」。這不是我所需要的,我並不關心實時性,甚至通常都不可能(想想移動設備上沒有信號)。但我從來沒有聽說過卡夫卡,謝謝! – Higemaru

+0

@Higemaru,很可能你需要使用這些技術結合你自己的解決方案。當然,雲和Web服務領域的「實時」與傳統的實時概念有着不同的含義。大多數人在某些限制條件下使用「實時」來表示「非常快」和「非常快」。 – rodolk

+0

當然,但我並沒有瞄準甚至接近實時的任何東西;-) – Higemaru

0

您是否考慮過使用Amazon Simple通知服務來解決此問題?

您可以爲要保持同步的每組設備創建主題。只要數據集中有更新,設備就可以發佈到主題,而主題又會被推送到使用SNS的所有設備。

+0

不,它似乎並不是我正在尋找的東西。看起來有點過分,我正在尋找更多的algorthims,而不是完成的軟件/服務。 – Higemaru

+0

有許多方法可以同步您的設備。我已經告訴你一個,我認爲這不是一個矯枉過正的問題。它實際上非常簡單和高效。 或者,您可以使用八卦協議來同步您的設備。設備將不得不保持指紋(根據它們的當前狀態的散列)。每當他們對世界的看法發生變化時,他們都可以八卦將變化推向其他設備。在這種情況下,消息複雜度非常高。 – anupam

+0

你讀過我問題的最後一段嗎?我不在尋找產品,我正在尋找算法。我對亞馬遜SNS瞭解不多,但它如何幫助同步?請記住,每當設備發生每次更新時,它都不是一種選擇(也不是我的目標),而是以最終所有設備都具有所有信息的方式交換信息。如果設備無法到達(Amazon SNS)消息的位置? – Higemaru