我有一个 java web 服务器,目前正在使用 Guava 库来处理我大量使用的内存缓存。我现在需要扩展到多台服务器(2+)以进行故障转移和负载平衡。在此过程中,我改为从进程内缓存切换到 Memcache(外部服务)。但是,我对结果印象并不深刻,因为现在几乎每次调用,我都必须对另一台服务器进行外部调用,这比内存缓存慢得多。
我在想,与其从 Memcache 获取数据,不如继续在每台服务器上使用本地缓存,并在需要更新缓存时使用 RabbitMQ 通知其他服务器。因此,如果一个服务器对底层数据进行了更改,它也会向所有其他服务器广播一条消息,告诉他们他们的缓存现在无效。每个服务器都在广播和侦听缓存失效消息。
有谁知道这种方法的任何潜在缺陷?我有点紧张,因为我找不到其他人在生产中这样做。我看到的唯一问题是每个服务器都需要更多内存(内存缓存),并且任何给定的服务器可能需要更长的时间才能获取更新的数据。还要别的吗?