我有一個任務是爲大規模可擴展分佈式共享內存(DSM)應用程序構建原型。原型只能作爲一個概念驗證,但我想通過選擇稍後將在真實解決方案中使用的組件來最有效地度過我的時間。選擇分佈式共享內存解決方案
該解決方案的目的是從外部來源獲取數據輸入,將其轉移並使結果可用於多個前端。那些「前端」只需從緩存中獲取數據並在沒有額外處理的情況下提供服務。前端命中這個數據的數量實際上可能是每秒數百萬次。
數據本身非常不穩定;它可以(並且確實)變化很快。然而,前端應該看到「舊」數據,直到最新的數據被處理和緩存。處理和寫入由單個(冗餘)節點完成,而其他節點只讀取數據。換句話說:沒有通讀行爲。
我一直在尋找到解決方案,如memcached然而,這尤其是一個不履行在下面列出的所有我們的要求:
- 該解決方案必須至少有Java客戶端API這是相當不錯因爲應用程序的其餘部分是用Java編寫的,而且我們是經驗豐富的Java開發人員;
- 該解決方案必須完全彈性:應該可以添加新節點而不重新啓動集羣中的其他節點;
- 該解決方案必須能夠處理故障轉移。是的,我意識到這意味着一些開銷,但總體服務的數據量不大(最大1G),所以這應該不成問題。通過「故障轉移」,我的意思是在節點關閉時無需硬編碼/更改服務器IP地址(如)在memcached客戶端中的無縫執行;
- 理想情況下,應該可以指定數據重疊程度(例如,應該在DSM羣集中存儲多少份相同的數據);
- 沒有必要永久存儲所有數據,但可能需要對某些數據進行後處理(例如對數據庫進行序列化)。
- 價格。顯然,我們更喜歡免費/開放源代碼,但如果解決方案是值得的,我們很樂意支付合理的費用。無論如何,付費24小時/天支持合同是必須的。
- 整個事情必須在我們的數據中心託管,所以像Amazon SimpleDB這樣的SaaS產品不在範圍之內。如果沒有其他選項可用,我們只會考慮這一點。
- 理想的解決方案是嚴格一致(如在CAP中);然而,最終一致可以被視爲一個選項。
在此先感謝您的任何想法。
謝謝,我們實際上是在其中一個項目中使用Hazelcast。老實說,我期待有人暗示使用像Project Voldemort這樣的東西,並且提供一些見解,這個比例有多好(主要是因爲我提到的要求),主要是因爲Hazelcast似乎是一個多用途的庫,而項目像Voldemort是特定的基於地圖的DSM。我當然不想說Hazelcast不會應付負荷 - 這需要進行測量和測試。 – mindas 2010-06-17 17:57:51
剛剛意識到你是Hazelcast的作者之一。哎呦:) – mindas 2010-06-17 18:05:17
是的我是其中一位作者:) Hazelcast分佈式地圖是一個特定的基於地圖的DSM。有關可擴展性,請參閱http://java.dzone.com/articles/running-hazelcast-100-node上的我們的100節點集羣演示。 – 2010-06-18 09:43:32