Pull to refresh
687.86
Сбер
Больше чем банк

Обзор релиза Apache Ignite 2.16.0

Level of difficultyMedium
Reading time5 min
Views2.7K

Apache Ignite — это высокопроизводительная распределенная база данных с открытым исходным кодом, предназначенная для хранения и распределенной обработки больших объемов данных в кластере узлов. В СберТехе есть команда, которая занимается ее развитием. Мы создали Platform V DataGrid — продукт, основанный на Apache Ignite, с enterprise‑функциональностью.

Я был релиз-менеджером Apache Ignite 2.16.0, вышедшей 25 декабря 2023 года, спустя полгода от предыдущего релиза. Хочу ознакомить с основными разработками этой версии:

  • дампы кешей;

  • online CDC;

  • улучшения SQL-движка на основе Apache Calcite;

  • оптимизация работы сервисов через тонкий клиент.

Дампы кешей

В Ignite есть снимки (снапшоты) персистентных кешей, которые активно используют пользователи. В этом релизе появился ещё один способ сделать резервную копию пользовательских данных — дамп кеша. Это консистентная копия, записываемая на диск. Представляет собой содержимое кеша в виде последовательно записываемых entry (key, value). В дамп также включена метаинформация о кешах и типах данных.

Основные отличия от снимков:

  • Поддерживают резидентные (in‑memory) кеши.

  • Занимают меньше места. Дампы содержат только entry, данные «как есть». Снимки же копируют файлы партиций, в которых помимо данных ещё размещаются внутренние структуры и индексы.

  • Могут использоваться для офлайн‑обработки данных.

Для создания дампа нужно обратиться к интерфейсу IgniteSnapshot, например:

ignite.snapshot().createDump("dump-name", Arrays.asList("cacheGrp1", "cacheGrp2")).get();

Для чтения дампов Ignite предоставляет утилиту Dump Reader. Пример использования:

// Consumer should be implemented to receive all data stored in cache dump. DumpConsumer cnsmr = new DumpConsumerImpl(..);
DumpReaderConfiguration cfg = new DumpReaderConfiguration(new File("path-to-dump"), cnsmr);

new DumpReader(cfg, log).run();

В DataGrid дополнительно реализованы:

  • восстановление кешей из дампа,

  • проверка целостности данных,

  • поддержка консольной утилиты, JMX, REST.

Online CDC

Начиная с версии 2.12 появилась поддержка CDC. Эта функциональность позволяет получать изменения по данным кеша. Способов его применения много: подсчёт статистики, аудит, стриминг изменений и даже межкластерная репликация. Реализация была основана на обработке WAL-архивов через отдельное приложение, в отдельном процессе. Подробнее можно ознакомиться в статье на Хабре.

Между изменением данных в кеше и его обработкой слушателем CDC существует задержка. Она зависит от конфигурируемых настроек: таймаута принудительного архивирования WAL-сегмента и частоты сканирования директории для обнаружения процессом CDC этого архива. Общая задержка обычно составляла секунды, а то и десятки секунд. Часть пользователей захотели получать события значительно быстрее.

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

Ignite предоставляет интерфейс CdcManager для сбора событий. В DataGrid мы сделали реализацию с буфером, которая позволяет использовать с новым режимом те же слушатели, что и в дисковом режиме. А также настроить межкластерную репликацию с задержкой менее секунды.

Улучшения SQL-движка на основе Apache Calcite

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

Добавлена поддержка новых хинтов, чтобы помочь оптимизатору сделать более рациональные оптимизации или составить более быстрый план запроса:

Новый движок становится более стабильным — в этом релизе более десятка исправлений по производительности и багам.

Оптимизация работы сервисов через тонкий клиент

Напомню, что Ignite — это ещё и платформа для микросервисов. Я нашёл две хорошие статьи про это: раз и два.

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

Service Awareness автоматически будет включен при соблюдении двух условий:

  • включено свойство Partition Awareness в конфигурации тонкого клиента (оно включено по умолчанию);

  • версия узлов кластера и тонкого клиента 2.16.0 или выше.

Другие улучшения

  • Релиз содержит исправления для поддержки JDK 14–21 версий.

  • Реализован Cluster Management API — внутренняя функциональность для объединения управляющих команд. Теперь все существующие команды автоматически синхронизированы между интерфейсами вызова — CLI, JMX. В DataGrid доступен вызов через REST. В планах сделать автоматическую генерацию документации и поддержку man для консольной утилиты.

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

  • Комьюнити разработчиков решило удалить экспериментальную реализацию MVCC. Режим кеша TRANSACTIONAL_SNAPSHOT удалён.

  • Разные типы кешей (atomic, transactional) в пределах одной кеш‑группы теперь недоступны. Для совместимости пока доступно системное свойство для отключения проверки.

  • Модули ignite‑ml и Cassandra переехали в репозиторий Ignite extensions. Теперь у них свой релизный цикл.

Заключение

В этой статье я рассмотрел только часть изменений, а их больше сотни: оптимизации производительности, повышение надежности и добавление новой функциональности. С полным списком улучшений можно ознакомиться в release notes. Apache Ignite развивается благодаря активному сообществу, к которому можно присоединиться. Для обратной связи можно использовать user‑list.

Никита Амельчев, релиз-менеджер Apache Ignite

https://habr.com/users/nsamelchev

Tags:
Hubs:
Total votes 15: ↑15 and ↓0+15
Comments5

Information

Website
www.sber.ru
Registered
Founded
Employees
over 10,000 employees
Location
Россия