2011-05-13 69 views
0

我讀過關於各種跨機器緩存機制(Redis,Velocity,nMemCached等)。他們似乎都需要一臺中央機器來管理緩存。自行安裝內存緩存 - 它存在嗎?

是否有自我安裝的緩存引擎 - 例如,如果緩存在當前子網中不存在,它將創建一個節點。如果它確實存在,它會將機器加入到緩存池中?

上下文:我有一個應用程序,通過ClickOnce在同一子網內部署約100名用戶。這些用戶中的每一個都通過廣域網(跨越國家,在某些情況下跨越整個海洋)訪問資源,這些資源執行CPU密集型計算並需要大量時間才能完成。

因此,應用感覺呆滯。我已經盡我所能通過將長時間查詢放到單獨的線程中來緩解這種情況。但那只是你到目前爲止。我已經添加了本地緩存(通過SQL Compact DB),這很好用,但是大多數用戶訪問類似的信息並且一起對計算服務器施加一點壓力。如果我能夠通過我的應用程序發佈內存中的緩存,並且能夠與其他機器一起工作以創建全網絡緩存機制,我認爲我可以將其提升到下一個級別。

+0

機器會不知道彼此必須知道嗎?我認爲這就是中央機器進來的地方。 – mellamokb 2011-05-13 16:46:24

+0

UDP廣播應該可以在子網內進行。 – CodesInChaos 2011-05-13 16:48:06

+0

@CodeInChaos - 正確的,這是我的想法。 – AngryHacker 2011-05-13 17:02:12

回答

2

你是誰知道會是最好的一個,但有一個「應用程序服務器」,將協調一大堆可能是一件好事:

  1. 用戶1詢問服務器「我需要X」。
  2. 服務器告訴User1「好吧,請求它到DataBase」
  3. User2詢問服務器「我需要X.」
  4. 服務器告訴用戶2「用戶1知道了」。
  5. ...
  6. 用戶1告訴服務器「我不再需要X了」。

由於其不穩定的特性,或者爲了避免阻塞其中一個用戶的連接,您還可以使某些類型的數據「不可緩存」。當然,服務器會收到很多請求,但如果你不得不通過網絡解決方案與廣播進行比較。如果我沒有正確理解你的問題,只寫一條評論,不要理會這一點,我會刪除答案,不要誤導SO用戶。

2

如果您不想使用主機,或者您不想依賴特定的網絡佈局/安裝,則可以考慮使用點對點作爲選項。 WCF具有本地對等支持。這裏是一個看起來您需要有些相關鏈接:How To Design State Sharing In A Peer Network