hazelcast vs ehcache


вопрос ясен, как вы видите в названии, я был бы признателен, чтобы услышать ваши идеи о adv./disadv. разница между ними.

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

6 52

6 ответов:

мы попробовали оба из них для одного из крупнейших интернет-рекламы и электронной коммерции платформы. Мы начали с ehcache / terracotta (серверный массив), потому что он хорошо известен, поддерживается Terracotta и имеет большую поддержку сообщества, чем hazelcast.
когда мы получаем его в производственной среде (распределенной,за пределами одного кластера узлов), все изменилось, наша бэкэнд-архитектура стала очень дорогой, поэтому мы решили дать Hazelcast шанс.

Hazelcast мертв просто, он делает то, что он говорит и выполняет очень хорошо без каких-либо накладных расходов конфигурации.

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

несмотря на то, что Ehcache был популярен среди систем Java, я нахожу его менее гибким, чем другие решения для кэширования. Я играл с Hazelcast, и да, он сделал эту работу, было легко запустить и т. д., И это новее, чем Ehcache. Я могу сказать, что Ehcache имеет гораздо больше возможностей, чем Hazelcast, является более зрелым и имеет большой поддержки.

есть несколько других хороших решений кэша, а также, со всеми различными свойствами и решениями, такими как старый добрый Memcache, Membase (теперь CouchBase), Redis, AppFabric, даже несколько решений NoSQL, которые обеспечивают хранение ключевых значений с сохранением или без него. Все они имеют разные характеристики в том смысле, что они реализуют теорему CAP или базовую теорему вместе с транзакциями.

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

этой тест было сделано совсем недавно с Кассандра на "облаке" от Netflix. Они потянулись к миллиона записей в секунду около 300 экземпляров. Cassandra - это не кэш памяти, но ваша модель данных похожа на кэш, который состоит из пар значений ключей. Вы также можете использовать Кассандра как распределенной кэш-памяти.

Hazelcast был кошмаром для масштабирования, и стабильность по-прежнему является серьезной проблемой.

выделенный клиент для выбора компонентов сетки

  1. грязная версия, которая не может пережить потерю узла в любом месте, отрицая точку резервного копирования (superclient) или
  2. невероятно медленный вариант собственного клиента, который не позволяет для любого типа балансировки нагрузки на узлы обработки в сетке.

Если какой-либо хост может запросить записи из эта сетка данных была бы сладким дизайном, но вы застряли с этими двумя тусклыми вариантами, чтобы получить что-нибудь из этого.

также несколько проблем с пулами потоков базы данных, блокирующими отдельные члены и ничего не записывающими в базы данных, что приводит к постоянной потере записей, является частой проблемой, и нам часто приходится снимать все это в течение нескольких часов, чтобы обновить любой из JVM. Split brain также по-прежнему является проблемой, хотя в 1.9.6, похоже, успокоился a маленький.

объединение для перехода к Ehcache и улучшения уровня базы данных вместо использования этого в качестве лейкопластыря.

Hazelcast был кошмаром для меня. Я смог заставить его "работать" в кластерной среде Websphere. Я использую термин "работа" свободно. Во-первых, вся документация Hazelcast устарела и показывает только примеры с использованием устаревших вызовов методов. Пытаться использовать новый код без комментариев в Javadocs и без примеров в документации очень сложно. Кроме того, код контейнера J2EE просто не работает на данный момент, потому что он не поддерживает транзакции XA в В WebSphere. Возникает ошибка, вызывающая код, который явно следует за их единственным примером J2EE (похоже, что Milestone 3.0 обращается к этому). Мне пришлось забыть о присоединении Hazelcast к транзакции J2EE. Похоже, что Hazelcast определенно ориентирован на не EJB / не-J2EE контейнерную среду. Звонки в Hazelcast.getAllInstances () не сохраняет никакой информации о состоянии Hazelcast при переключении с одного корпоративного Java-компонента на другой. Это заставляет меня создать новый Hazelcast экземпляр просто для выполнения вызовов, которые дают мне доступ к моим данным. Это приводит к тому, что многие экземпляры Hazelcast запускаются на одной и той же JVM. Кроме того,извлечение данных из Hazelcast не быстро. Я попытался получить данные, используя как собственный клиент, так и непосредственно в качестве члена кластера. Я сохранил 51 список, каждый из которых содержит только 625 объектов в Hazelcast. Я не мог выполнить запрос непосредственно в списке и не хотел хранить карту только для того, чтобы получить доступ к этой функции (операции SQL могут выполняться на карте). Потребовалось около половины секунды, чтобы получить каждый список из 625 объектов, потому что Hazelcast сериализует весь список и отправляет его по проводу, а не просто дает мне дельту (что изменилось). Другое дело, мне пришлось переключиться на конфигурацию TCPIP и явно перечислить ip-адреса серверов, которые я хотел быть в кластере. Конфигурация многоадресной рассылки по умолчанию не работала, и из групповых обсуждений в google другие люди также испытывают эту трудность. Подводя итог, я в конце концов я получил 8 машин, взаимодействующих в кластере через много часов мучительной программной конфигурации и проб и ошибок (документация будет мало помогать), но когда я это сделал, у меня все еще не было контроля над количеством экземпляров и разделов, создаваемых на каждом JVM из-за наполовину законченного характера Hazelcast для EJB/J2EE, и это было очень медленно. Я реализовал реальный случай использования в приложении страхования от безработицы, над которым я работаю, и код был намного быстрее, делая прямые звонки в базу данных. Было бы здорово, если бы Hazelcast работал так, как рекламируется, потому что я действительно не хотел использовать отдельный сервис для реализации того, что я пытаюсь сделать. Я широко использовал MongoDB, поэтому я могу пропустить весь кэш памяти и просто сериализовать свои объекты как документы в отдельном репозитории.

Hazelcast сериализует все, когда есть узел (стандартный-один), поэтому данные, которые вы сохраните в Hazelcast, должны реализовать сериализацию.

http://open.bekk.no/efficient-java-serialization/

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

Я не использовал Hazelcast, но я слышал, что он прост в использовании и что он работает. Я ничего не слышал о масштабируемости или производительности Hazelcast vs Terracotta/Ehcache, но учитывая количество масштабируемости и отказоустойчивого тестирования, которое делает Terracotta, мне трудно представить, что Hazelcast будет конкурентоспособным в производственном развертывании. Но я предполагаю, что это будет хорошо работать для небольших целей.

[предвзятость: я бывший сотрудник Terracotta.]