Использует ли EhCache преимущества памяти всех узлов, таких как MemCached? - PullRequest
3 голосов
/ 09 октября 2011

В документации MemCached упоминается, что данные распределены по узлам.Это их определение распределенного кэшированного.Если узлу A требуются данные, находящиеся на узле B, данные передаются из B в A. Если происходит сбой A, все данные, хранящиеся на A, больше не доступны для B.

Однако EhCache имеет другое определение распределенное кэширование .По сути, это больше похоже на разделяемую память, чем на распределенный кеш.Если узел A изменяет некоторые данные, узел B увидит эту модификацию.В случае сбоя A любые данные A, хранящиеся в общей памяти, остаются доступными для узла B.

Это приводит меня к двум вопросам:

  1. Если у меня 3 узла A, B, C, каждый из которых имеет 1 ГБ памяти, похоже, что MemCached добавит память и заставит ее выглядеть как 3 ГБ памяти для узлов.Тем не менее, похоже, что EhCache не добавляет 3 ГБ, а скорее позволяет использовать максимум 1 ГБ разделяемой памяти между каждым узлом.Это правильно?

  2. Если ответ на вопрос 1. да, то правильно ли сделать вывод, что EhCache и MemCached фактически дополняют друг друга, а не участвуют в соревновании?

Ответы [ 2 ]

4 голосов
/ 09 октября 2011

Говоря о том, что делает Ehcache, я не эксперт в Memcache.

Ehcache - это «многоуровневый кеш».Это позволяет увеличивать и уменьшать масштаб на каждом уровне.Если бы у вас было 3 серверных узла Ehcache (на самом деле серверный уровень - это TSA, серверный массив Terracotta), каждый из этих серверных узлов имел бы уникальные данные, поэтому не считая того, что можно перенести на диск, у вас будет 3 гигабайта.TSA можно настроить на использование постоянного диска для HA и / или активного пассивного переключения при сбое.С подключенным BigMemory вы можете увеличить любой из этих уровней до сотен гигабайт оперативной памяти, не опасаясь проблем с сборкой мусора.

Так почему же многоуровневый кеш крут?Это как он использует память в вашем клиенте.Вы можете иметь согласованные данные, вплоть до сотен гигабайт, на расстоянии всего лишь нескольких микросекунд в локальной куче и вне кучной локальной сети или в миллисекундах удаленной станции.И все данные могут быть HA.

Вы можете узнать больше о некоторых из этих вещей здесь:

http://scaleaholic.blogspot.com/2010/09/little-bit-about-bigmemory-for-ehcache.html

и здесь:

http://scaleaholic.blogspot.com/2011/08/what-is-terracotta.html

и, конечно, ehcache.org и terracotta.org

2 голосов
/ 18 октября 2011

У меня есть опыт работы с обоими.

Я бы сказал «да» на оба ваших вопроса.

Я использую ehcache вместе с Hibernate. Он кэширует данные, найденные в центральной базе данных, в памяти на нескольких узлах сервера в кластере. Причина, конечно, в том, чтобы иметь меньший доступ к базе данных. Если кэшированное значение записывается одним узлом, то это значение должно быть признано недействительным на других узлах, чтобы заставить их перечитать значение из базы данных и повторно кэшировать его.

Memcached Я использовал в качестве источника данных. Это простая база данных ключ = значение. На каждом сервисном узле вы определяете список узлов memcached, которые он может использовать. Затем он запишет в какой-то узел (по круговому циклу, я думаю). Ключ имеет информацию о том, на каком узле memcached хранится значение.

Итак, по моему опыту, memcached - это часто распространяемая база данных (не реляционная, но все же база данных), в то время как ehcache - более традиционный кеш.

...