У меня есть веб-сервер java, и в настоящее время я использую библиотеку Guava для обработки моего кэширования в памяти, которое я использую в большой степени. Теперь мне нужно расширить до нескольких серверов (2+) для переключения при сбое и балансировки нагрузки. В этом случае я переключился с кэша в процессе на Memcache (внешняя служба). Тем не менее, я не очень впечатлен результатами, так как сейчас почти для каждого звонка мне приходится делать внешний вызов на другом сервере, что значительно медленнее, чем кеш в памяти.
Я думаю вместо того, чтобы получать данные из Memcache, я мог бы использовать локальный кеш на каждом сервере и использовать RabbitMQ для уведомления других серверов, когда их кеши необходимо обновить. Поэтому, если один сервер внесет изменения в базовые данные, он также передаст сообщение всем остальным серверам, сообщив, что их кеш теперь недействителен. Каждый сервер передает и прослушивает сообщения о недействительности кеша.
Кто-нибудь знает какие-либо потенциальные подводные камни такого подхода? Я немного нервничаю, потому что я не могу найти кого-либо еще, кто делает это в производстве. Единственные проблемы, которые я вижу, будут заключаться в том, что каждому серверу требуется больше памяти (в кэш-памяти), и для любого данного сервера может потребоваться немного больше времени для получения обновленных данных. Что-нибудь еще?