Кэш второго уровня для веб-приложения java и его альтернатив - PullRequest
1 голос
/ 16 марта 2010

Между переходами веб-приложения я использую объект Session для сохранения своих объектов. Я слышал, что есть программа под названием memcached, но на сайте нет скомпилированной версии, кроме того, некоторые люди думают, что есть реальные недостатки этого. Теперь я хочу тебя спросить. Каковы альтернативы, плюсы и минусы разных подходов? Нужно ли устанавливать memcached Painpul для системных администраторов? Сложно ли встраивать его в существующую инфраструктуру с точки зрения системного администратора?

Как насчет использования базы данных для хранения временных данных между переходами веб-приложения? Это нормальная практика?

Ответы [ 3 ]

2 голосов
/ 16 марта 2010

Как насчет использования базы данных для хранения временные данные между веб-приложением переходы? Это нормальная практика?

База данных уже имеет кеш. Приложение для проектирования скважины должно попытаться использовать его для уменьшения дискового ввода-вывода .

Кэш базы данных работает на уровне данных. Вот почему другой механизм кэширования может быть использован для обращения к различным уровням. На уровне Java вы можете использовать кэш 2-го уровня hibernate, который может кэшировать сущности и запрашивать результат. Это может заметно уменьшить сетевой ввод-вывод между приложением. сервер и база данных.

Тогда вы можете обратиться к горизонтальная масштабируемость , то есть добавить серверы для управления нагрузкой. В этом случае кэш 2-го уровня должен быть распределен по узлам. Это существует (см. JBoss cache), но управлять им немного сложнее.

Распределенный кэш работает лучше, если у него более простая схема, основанная на ключ / значение . Вот что такое memcached, но есть и другие подобные решения. Самая большая проблема с распределенными кешами - аннулирование устаревших записей - что само по себе может стать узким местом в производительности.

Не думайте, что вы можете использовать распределенный кеш как есть , чтобы проблемы с производительностью исчезли. Проектирование масштабируемой распределенной архитектуры требует опыта и всегда является компромиссом между тем, что оптимизировать, а что нет.

Возвращаясь к вашему вопросу: для обычного приложения ИМХО нет необходимости в распределенном кеше. Достойный дисковый ввод-вывод и сетевой ввод-вывод обычно приводят к достойной производительности.

EDIT

Для непостоянных объектов у вас есть несколько вариантов:

  • HttpSession. Объекты необходимо реализовать Serializable. Точный способ управления сеансом зависит от контейнера. В кластере сеанс обычно дублируется дважды, поэтому в случае сбоя одного узла у вас остается одна копия. Затем существует сходство сеанса для направления запроса на сервер, на котором сеанс находится в памяти.
  • Распределенный кеш. Система, подобная memcached, действительно может иметь смысл, но я не знаю деталей.
  • База данных. Конечно, вы можете сбросить любой объект Serializable в базе данных в BLOB. Может быть вариантом, если веб-серверы не так надежны, как сервер базы данных.

Опять же, для обычного приложения , я бы попытался пройти как можно дальше с HttpSession.

1 голос
/ 16 марта 2010

Как насчет Ehcache ? Это простое в использовании решение на Java, готовое для подключения к Hibernate. Насколько я помню это поддерживается контейнерами.

Это довольно безболезненно в моем опыте.

0 голосов
/ 16 марта 2010

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html#performance-cache

На этой странице должно быть все, что вам нужно (надеюсь!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...