Единый кэш Java для нескольких серверов приложений

У нас есть несколько серверов приложений за обратным прокси. Нам нужен единый кеш на другом хосте, который могут легко использовать все серверы приложений, поэтому кеш должен иметь какую-то поддержку сети. Кроме того, настройка должна быть простой, возможно, с поддержкой докеров, но это не обязательно. Длительность кеша составляет около 1 дня. API должен быть максимально простым и стандартизированным (JCache?). На более позднем этапе мы хотим предварительно растворить кэш.

Какие у меня есть варианты?

Предыстория: на первом этапе мы хотим снизить нагрузку на серверные системы, которые в основном предоставляют сервисы SOAP. Итак, мы хотим кэшировать ответ SOAP (JAX-WS). Вероятность попадания в кэш на первом этапе составит около 25%. Позже мы захотим использовать тот же кеш и для JPA (у нас уже включено кеширование памяти для каждого сервера приложений и используется стратегия координации кеша). Чтобы использовать еще больше кэширования, нам понадобятся некоторые категории кеширования сортировки.


person Christian    schedule 19.05.2015    source источник
comment
Вы пробовали memcached? Он просто запускает кеш-сервер на определенном порту, и вы можете вызывать его со всех своих серверов приложений. У него также есть хороший API-интерфейс Java.   -  person Veselin Davidov    schedule 19.05.2015
comment
проверьте этот сайт: javaworld.com/article/2078565/open-source-tools/   -  person Veselin Davidov    schedule 19.05.2015
comment
Они используют spymemcached в качестве клиента, что в некоторой степени ограничивает возможности клиента. Мы хотим быть открытыми в отношении клиента. Но это был бы реальный вариант.   -  person Christian    schedule 19.05.2015
comment
да, в примере они используют этого клиента, но в проекте мы его не использовали. это решение с открытым исходным кодом, протокол с открытым исходным кодом, вы не обязаны использовать уже созданный клиент. Я указывал на архитектуру в ссылке. По моему опыту, он отлично работает в рабочей среде даже на сайте с миллионами пользователей.   -  person Veselin Davidov    schedule 19.05.2015


Ответы (2)


В общем: вопрос слишком широкий, и на самом деле вы просите рекомендации по продукту. Пожалуйста, ознакомьтесь с рекомендациями по вопросам stackoverflow.

По поводу вашего вопроса:

Не существует «единого кеша» ни для каких целей. Кроме того, может быть много вариантов в программном обеспечении и архитектуре системы, а также с одним продуктом кеширования. Лучшее решение зависит не от приложения, а от типа доступа к данным, который вы хотите кэшировать. Некоторые вопросы, которые приходят мне в голову:

Какая у вас модель использования: в основном чтение или чтение / запись? Какой тип доступа, точка, диапазон или полное сканирование? Какие операции вы выполняете с данными? Каково количество объектов и типичный размер объекта? Есть горячие точки? Сколько у вас серверов приложений? Есть ли ограничение памяти на серверах приложений? Насколько дорого обходится генерация данных в серверной части (задержка и затраты на ресурсы)?

Одна общая рекомендация: если у вас всего несколько серверов приложений, я бы начал с локального кэширования на серверах приложений и проигнорировал бы тот факт, что на бэкэнде могут быть избыточные запросы от разных серверов приложений. Таким образом вы сможете сохранить существующую архитектуру системы. Размещение отдельного кэш-сервера или серверов требует тщательного планирования и множества соображений при размещении, развертывании и эксплуатации вашего приложения.

Одна вторая общая рекомендация: Вероятность попадания в кеш будет около 25% на первом этапе Кеш с такой скоростью попадания будет бесполезен. Может случиться так, что вы вообще не получите никакого прироста производительности от кеша. В любом случае могут быть причины для этого, например для улучшения приложения для флеш-толпы. Это требует более детальной проработки. Дважды проверьте свои числа!

Жду более подробных вопросов :)

person cruftex    schedule 29.05.2015
comment
Спасибо за ответ. С самого начала, вероятно, лучше всего будет использовать локальный кеш для каждого экземпляра. 25% на первый взгляд довольно бесполезно, но на втором этапе мы хотим предварительно заполнять этот кеш каждую ночь и достичь вероятности попадания около 90% +. 25% по крайней мере помогают опытным пользователям запрашивать одни и те же (дорогие) данные снова и снова. Сейчас мы собираемся реализовать JCache, возможно, Infinispan, который дает нам много вариантов в отношении инфраструктуры. Во-вторых, это поможет уменьшить сложность кода, выросшую за годы, потому что некоторые объекты уже кэшированы в хэш-картах в разных местах. - person Christian; 01.06.2015

Как насчет использования кеш-сервера из Ehcache? Он предоставляет интерфейс RESTful и может работать на выделенном сервере.

person hertzi    schedule 19.05.2015