我想創建一個分佈式系統,其中數據在所有節點上分割。我知道有像Hazelcast或Apache Ignite這樣的圖書館可以爲你做這項工作。就我而言,對於每個分片密鑰,我需要創建一個到另一個系統的套接字訂閱,這樣不僅僅是分發數據,還包括如何以分佈式方式實際創建這些訂閱。如何根據字符串的值在一組節點上進行分片?
想法是,爲每個分片鍵創建一個訂閱到其他系統。每個訂閱都會保留一個包含數據的條目列表,以檢查來自套接字連接的每個更新。
我想到的是,爲每個新條目發送一條帶有分片鍵和數據的消息給主題。然後,每個節點將應用分片算法來決定哪些負責處理消息,然後創建對套接字連接的訂閱(如果它尚未存在並向其中添加數據)。
這樣做的複雜性在於處理羣集拓撲變化。我需要手動重新平衡這些連接,方法是讓一個節點充當領導者,重新裝入數據庫中的數據並重新發送數據。節點還需要對清除訂閱的這些更改做出反應。爲此,我考慮使用一個版本號,該版本號會隨着每次更改而增加的數據一起出現,並允許節點識別這些更改。另一個解決方案是讓每個節點都知道通過事件發生的拓撲變化,但這些都是異步的,所以在清除訂閱時我可能會遇到競爭狀況。
有沒有其他方式或更好的做法?也許Ignite提供了一些功能? (我在這種情況下使用Ignite作爲緩存)
謝謝。
請您詳細說明一下嗎?對於我通過閱讀文檔所瞭解的內容,我需要創建:1-使用分片算法加載當前數據的查詢。 2-對於新條目具有相同分片算法的過濾器。 3-一旦一切都已經開始,通過過濾器的條目的監聽者。 4-代碼來處理通過初始查詢的條目。有了這個,我會確保每個條目只有一個節點執行我的邏輯。它是否正確?我將如何處理拓撲變化?我需要重新開始集羣中的每個更改。 – Kilian
首先,Ignite不會做分片。它基於親和函數基於每個密鑰級別分割數據。連續查詢允許節點偵聽羣集中任何位置發生的緩存更新,並在服務器端使用可選的篩選器(您可以放置任何您喜歡的邏輯)。如果您有備份,拓撲更改會自動處理。 –