Открыть сервис

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 →