Как настроить кеш на сервере приложений - PullRequest
4 голосов
/ 17 января 2009

Наши клиенты имеют сотни проектов на сервер приложений.

Каждый проект имеет свой собственный дескриптор метаданных (~ 1 МБ в памяти, ~ 1 с для загрузки из БД). Метаданные используются для проверки каждого запроса к серверу в различных аспектах (разрешения, допустимые поля, значения полей и т. Д.). Мы сильно зависимы от этих метаданных.

Чтобы сэкономить время на запросы к БД, мы решили реализовать механизм кэширования (используя EHCache) для хранения метаданных проекта. И мы хотели бы настроить кэш должным образом.

Мне было интересно, каковы методы настройки свойств кэша (общий размер, количество объектов, стратегии эвакуации ...)

Например, следует ли освобождать объекты, к которым не обращались в течение определенного периода времени, для экономии памяти? Как выбрать стратегию выселения (например, LRU, MRU)?

У нас есть опытная команда нагрузочного тестирования и множество данных от клиентов (количество проектов, средний размер метаданных и т. Д.), Поэтому создание среды нагрузочного тестирования не должно быть проблемой. Я просто не уверен, что именно я должен искать?

Пожалуйста, поделитесь своим опытом настройки кэша.

Спасибо

Ответы [ 2 ]

4 голосов
/ 21 января 2009

Ключевая статистика, когда дело доходит до кеширования, довольно проста ... частота пропуска кеша. Вы хотите подсчитать, сколько раз кто-то что-то запрашивал в кеше, и сколько раз этого «чего-то» еще не было в кеше, а последнее, поделенное на первое, - ваша частота промахов.

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

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

1 голос
/ 21 января 2009

Оптимальная стратегия выселения может сильно зависеть от конкретных данных и от того, как они используются.

Вот несколько общих примеров:

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

Темы форума (может быть, не лучший пример) - стратегия выселения должна быть ориентирована на много чтений, а также на частые записи.

В то время как новостной контент может быть наиболее оптимально сконфигурирован с помощью стратегии выселения наименьшего количества недавно использовавшихся (LRU), темы форума в этом примере могут быть более оптимально сконфигурированы с помощью стратегии выселения наименьшего часто используемого (LFU) В любом случае при добавлении новых сообщений кэш для ветки форума необходимо будет часто заменять, однако стратегия LFU сохранит в кэше самые активные потоки.

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