【发布时间】:2014-02-01 14:59:28
【问题描述】:
我有一个 java web 服务器,目前正在使用 Guava 库来处理我大量使用的内存缓存。我现在需要扩展到多台服务器(2+)以进行故障转移和负载平衡。在此过程中,我改为从进程内缓存切换到 Memcache(外部服务)。但是,结果并没有给我留下太深刻的印象,因为现在几乎每次调用,我都必须对另一台服务器进行外部调用,这比内存缓存慢得多。
我想代替从 Memcache 获取数据,我可以继续在每台服务器上使用本地缓存,并在需要更新缓存时使用 RabbitMQ 通知其他服务器。因此,如果一个服务器对底层数据进行了更改,它也会向所有其他服务器广播一条消息,告诉他们他们的缓存现在无效。每个服务器都在广播和监听缓存失效消息。
有人知道这种方法的任何潜在缺陷吗?我有点紧张,因为我找不到其他人在生产中这样做。我看到的唯一问题是每个服务器都需要更多内存(内存缓存),并且任何给定的服务器可能需要更长的时间才能获取更新的数据。还有什么?
【问题讨论】:
-
我发现 DZone 上的这个 article 很有帮助,但它没有解决向其他系统发送消息以保持缓存一致的问题。
-
请详细说明您的设置。如果您看到响应时间为 250-350 毫秒,则说明您的缓存/服务器配置存在问题。
标签: web-services memcached rabbitmq guava memorycache