Hazelcast
Hazelcast — это распределённая платформа для обработки данных в оперативной памяти (in-memory data grid), предоставляющая средства для кэширования, хранения и вычислений в распределённых системах. Относится к классу NoSQL-решений и технологий in-memory computing. Разрабатывается одноимённой компанией Hazelcast, Inc. (США). Основное назначение — обеспечение высокой производительности, масштабируемости и отказоустойчивости приложений за счёт объединения оперативной памяти нескольких серверов в единое логическое хранилище.
История
Разработка Hazelcast началась в 2008 году как проект с открытым исходным кодом. Основателями выступили Тал Ипкин (Tal Ipkin) и Фуад Малик (Fuad Malik). Первая стабильная версия (1.0) была выпущена в 2010 году. В 2012 году компания Hazelcast, Inc. привлекла первые инвестиции, что позволило перейти к коммерциализации продукта. В 2014 году вышла версия 3.0, в которой появилась поддержка распределённых вычислений (MapReduce, EntryProcessor). В 2016 году был выпущен Hazelcast Jet — модуль для потоковой обработки данных (stream processing), который впоследствии стал частью ядра платформы. В 2018 году компания представила Hazelcast Cloud — облачный сервис для управления кластерами. В 2020 году вышла версия 4.0, ознаменовавшая переход к модульной архитектуре и новому API (Hazelcast IMDG). По состоянию на 2024 год Hazelcast используется в банковском секторе, телекоммуникациях, электронной коммерции и других отраслях, где требуется низкая задержка доступа к данным.
Архитектура и принцип работы
Кластерная структура
Hazelcast работает на основе кластера, состоящего из нескольких узлов (nodes). Каждый узел — это экземпляр JVM (Java Virtual Machine), запущенный на отдельном сервере или контейнере. Узлы автоматически обнаруживают друг друга через многоадресную рассылку (multicast) или явную конфигурацию (TCP/IP, AWS Discovery, Kubernetes Discovery). Кластер не имеет единой точки отказа (masterless): все узлы равноправны, и при выходе одного из них данные автоматически перераспределяются между оставшимися.
Распределение данных
Данные в Hazelcast хранятся в виде распределённых карт (IMap), которые сегментируются на партиции (partitions). По умолчанию количество партиций равно 271. Каждая партиция хранится на одном из узлов и имеет одну или несколько резервных копий (backup count). Резервирование обеспечивает отказоустойчивость: если узел выходит из строя, данные восстанавливаются с резервной копии на другом узле. Распределение партиций по узлам осуществляется с использованием консистентного хеширования (consistent hashing), что минимизирует перемещение данных при добавлении или удалении узлов.
Протоколы и взаимодействие
Узлы общаются между собой через собственный протокол Hazelcast Cluster Protocol (HCP), основанный на TCP. Для сериализации данных используются Java-сериализация, а также быстрые форматы: Kryo, Protocol Buffers, Avro. Взаимодействие с приложением происходит через клиентские библиотеки на Java, .NET, C++, Python, Node.js и Go. Клиенты подключаются к любому узлу кластера и получают доступ ко всем данным.
Ключевые возможности
Распределённые структуры данных
Hazelcast предоставляет широкий набор распределённых аналогов стандартных коллекций Java:
- IMap — распределённый аналог HashMap с поддержкой транзакций, событий и SQL-запросов.
- ISet, IList, IQueue — распределённые множества, списки и очереди.
- MultiMap — карта, допускающая несколько значений для одного ключа.
- ReplicatedMap — карта, данные которой реплицируются на все узлы кластера.
- Ringbuffer — кольцевой буфер для потоковой обработки.
- Topic — механизм публикации/подписки (pub/sub) для обмена сообщениями.
Кэширование
Hazelcast может использоваться как распределённый кэш, совместимый со спецификацией JCache (JSR 107). Поддерживаются стратегии вытеснения (LRU, LFU, TTL), а также интеграция с базами данных через механизм MapStore/MapLoader, позволяющий автоматически загружать данные из внешнего хранилища (например, PostgreSQL, MySQL, MongoDB) при обращении к кэшу.
Вычисления и потоковая обработка
Платформа поддерживает выполнение распределённых вычислений:
- EntryProcessor — атомарные операции над записями в IMap.
- Distributed Executor Service — асинхронное выполнение задач на узлах кластера.
- Hazelcast Jet (встроен в ядро с версии 5.0) — движок для потоковой и пакетной обработки данных, поддерживающий SQL, а также API на основе Java и Python.
SQL-запросы
С версии 5.0 Hazelcast включает встроенный SQL-движок, позволяющий выполнять запросы к распределённым данным в синтаксисе, близком к ANSI SQL. Поддерживаются JOIN, агрегации, фильтрация, сортировка. SQL-запросы могут выполняться как к данным в памяти, так и к данным, загруженным из внешних источников через MapStore.
Безопасность
Hazelcast поддерживает аутентификацию (через JAAS, LDAP, Kerberos), авторизацию на уровне операций (чтение, запись, администрирование) и шифрование трафика между узлами и клиентами (TLS/SSL). Для облачных развёртываний доступна интеграция с облачными провайдерами (AWS IAM, Azure AD).
Применение
Кэширование баз данных
Одно из наиболее распространённых применений — ускорение доступа к данным в реляционных базах данных. Hazelcast размещается между приложением и базой данных, снижая нагрузку на последнюю и уменьшая задержки ответа. Используется в системах электронной коммерции (например, для кэширования каталогов товаров) и банковских приложениях (для хранения сессий и справочных данных).
Управление сессиями
В веб-приложениях Hazelcast используется для хранения HTTP-сессий в распределённом виде, что позволяет обеспечить отказоустойчивость и балансировку нагрузки. Поддерживается интеграция с Tomcat, Jetty, Spring Session.
Обработка потоков данных
Hazelcast Jet применяется для анализа данных в реальном времени: мониторинг финансовых транзакций, обработка логов, агрегация метрик IoT. Возможна интеграция с Apache Kafka, RabbitMQ, Pulsar.
Микросервисная архитектура
Hazelcast служит в качестве распределённого хранилища состояний (state store) для микросервисов, обеспечивая консистентность данных без централизованной базы данных. Также используется для координации задач (распределённые блокировки, семафоры, atomic counters).
Режимы развёртывания
Локальный кластер (On-premises)
Узлы запускаются на физических или виртуальных серверах в локальной сети. Администрирование осуществляется через Hazelcast Management Center — веб-интерфейс для мониторинга состояния кластера, производительности и выполнения скриптов.
Облачное развёртывание
Hazelcast предоставляет облачный сервис Hazelcast Cloud (Viridian), который позволяет развернуть кластер в AWS, Azure или Google Cloud без управления инфраструктурой. Поддерживаются автоматическое масштабирование и резервное копирование.
Контейнеризация
Официальные Docker-образы Hazelcast доступны для развёртывания в Kubernetes. Hazelcast предоставляет оператор Kubernetes (Hazelcast Platform Operator), автоматизирующий создание, масштабирование и обновление кластеров.
Сравнение с аналогами
Hazelcast часто сравнивают с другими решениями класса in-memory data grids:
- Apache Ignite — ближайший аналог с открытым исходным кодом. Отличается поддержкой SQL-запросов с полным ACID-транзакциями и интеграцией с Hadoop. Hazelcast проще в настройке и имеет более низкое потребление памяти.
- Redis — легковесное in-memory хранилище, но не является полноценной data grid. Redis не поддерживает распределённые вычисления и сложные SQL-запросы. Hazelcast предоставляет более богатый API для Java-разработчиков.
- Memcached — простой распределённый кэш без поддержки транзакций, вычислений и постоянного хранения. Hazelcast функционально превосходит Memcached, но требует больше ресурсов.
Лицензирование и версии
Hazelcast распространяется по двум лицензиям:
- Community Edition — бесплатная версия с открытым исходным кодом (лицензия Apache 2.0). Включает основные функции: IMap, IQueue, кэширование, распределённые вычисления.
- Enterprise Edition — коммерческая версия с дополнительными возможностями: шифрование TLS/SSL, аутентификация LDAP, Management Center, горячее резервирование (hot restart), интеграция с Kubernetes. Ценообразование основано на количестве узлов в кластере.
Критика
Основные недостатки Hazelcast, отмечаемые пользователями:
- Ограниченная поддержка ACID-транзакций — в стандартной конфигурации транзакции не являются полностью изолированными (используется оптимистическая блокировка). Для строгих требований к консистентности требуется настройка.
- Потребление памяти — при хранении больших объёмов данных (сотни гигабайт) требуется значительный объём оперативной памяти на каждом узле.
- Сложность отладки — распределённый характер системы затрудняет диагностику проблем с производительностью и синхронизацией.
- Зависимость от Java — хотя существуют клиенты для других языков, ядро Hazelcast работает только на JVM, что ограничивает его использование в средах, не поддерживающих Java.
Интересные факты
- Hazelcast используется в высоконагруженных системах таких компаний, как eBay, Alibaba, AT&T, Morgan Stanley.
- Название «Hazelcast» происходит от комбинации слов «hazel» (орешник, символ гибкости) и «cast» (бросок, отсылка к распределённому характеру).
- В 2020 году Hazelcast, Inc. приобрела компанию-разработчика потокового движка «Jet», после чего технология была интегрирована в ядро продукта.
Источники
- Официальная документация Hazelcast (hazelcast.com/documentation)
- Hazelcast: The Definitive Guide (Matthew Staines, 2020)
- Статья «Hazelcast vs Apache Ignite: A Comparative Analysis» (InfoQ, 2021)
- Репозиторий Hazelcast на GitHub (github.com/hazelcast/hazelcast)
- Доклады конференции Hazelcast Summit (2022–2024)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →