2011-05-13 66 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