Tarantool 3.6
Дата выпуска: 2025-12-12
Релизы на GitHub: 3.6.0
В версии Tarantool 3.6 добавлены следующие важные возможности и улучшения для редакций Community и Enterprise:
- Community Edition (CE)
- Memtx: значительный прирост скорости восстановления из снимка.
- Новые виды пользовательских прав:
grantиmetagrant.
- Enterprise Edition (EE)
- Координатор обработки сбоев: поддержка синхронной репликации в топологиях с 2 ЦОД.
- MemCS: многочисленные улучшения.
Прирост скорости восстановления из снимка в данном релизе может составлять до 70% за счет переноса декодирования MsgPack-данных в отдельный поток.
Триггеры для спейсов и транзакций (space.on_replace,
space.before_replace) на время восстановления признаны устаревшими.
Новые виды пользовательских прав – grant и metagrant – позволяют
создавать пользователей с полным набором возможностей, как у встроенного
пользователя admin. grant позволяет предоставлять любые права за
исключением grant и metagrant конкретным объектам или классам
объектов, либо глобально (universe). metagrant позволяетс
предоставлять права grant и metagrant.
И grant, и metagrant можно предоставлять только глобально
(universe). Их можно предоставлять любым пользователям, кроме
текущего.
В предыдущих релизах координатор обработки сбоев обеспечивал режим синхронной репликации в случаях работы с 3 и более ЦОД.
При наличии N экземпляров в наборе реплик, минимальный размер кворума
составляет N/2 + 1. Прежде работа с 2 ЦОД не поддерживалась, поскольку
размер кворума нельзя было динамически уменьшить в случае потери
соединения со вторым ЦОД. Например, в минимальном наборе реплик,
состоящем из 2 экземпляров, размер кворума по умолчанию равняется 2
(рассчитывается как 2/2 + 1 = 2). Если один из экземпляров становится
недоступен, то совершать транзакции становится невозможно, потому как
нельзя получить подтверждение от второго экземпляра в наборе реплик.
Таким образом, новые транзакции теряются.
Теперь в режиме контролируемого переключения (supervised failover) Tarantool поддерживает синхронную репликацию в топологии с 2 ЦОД. При обнаружении недоступности второго ЦОД, координатор автоматически уменьшает размер кворума и восстанавливает работоспособность кластера, а затем автоматически возвращает штатное значение кворума при восстановлении второго ЦОД. Таким образом, потери транзакций не происходит.
При этом нужно учитывать следующие ограничения. Хранилища данных могут быть развернуты всего в двух ЦОД, но для корректной работы кластера требуется еще один – так называемый "кворумный ЦОД" – для дополнительного хранилища конфигурации (на базе etcd или Tarantool). Фактически мы получаем так называемую "топологию с 2,5 ЦОД", которая подразумевает в общей сложности 3 ЦОД: два ЦОД с полным набором компонентов (хранилища данных, маршрутизаторы, хранилища конфигурации) + один ЦОД с хранилищем конфигурации.
Также рассмотрим ситуации, когда топология с хранилищами данных, развернутыми в 2 ЦОД, может выйти из строя.
Ситуация #1: обогащение данных после падения одного из ЦОД было прервано a. ЦОД #1 выходит из строя, а ЦОД #2 остается работать. Координатор отработки сбоев уменьшает размер кворума до 1. Кластер продолжает обслуживать клиентов. b. ЦОД #1 возобновляется работу и начинает подкачивать пропущенные данные из ЦОД #2. Размер кворума по-прежнему равен 1. c. Процесс обогащения данных для ЦОД #1 еще не окончен, но теперь выходит из строя ЦОД #2. В этом случае кластер становится недоступным.
Ситуация #2: попытка повторно понизить размер кворума до минимума a. ЦОД #1 (из 2 узлов) выходит из строя, а ЦОД #2 (тоже из 2 узлов) остается работать. b. Один из 2 узлов в ЦОД #2 выходит из строя. В этом случае кластер также становится недоступным. Ситуация #3: оба ЦОД выходят из строя – это крайний случай, когда кластер становится недоступным.
В остальных ситуациях кластер сохраняет работоспособность.
Реализован ряд небольших улучшений в работе движка MemCS, в основном на
тему индексов и производительности. Теперь MemCS поддерживает следующие
возможности: * Агрегация по полям типа decimal, * Вставка в середину
первичного индекса с агрегациями, * Задание поколоночной схемы в
настройках формата спейса, а также определений вторичных индексов, *
index:quantile(), * Агрегаты для bloom-фильтров, * Статистика
агрегатов и сканера индекса, * Экспорт агрегатов индекса в
соответствующие Lua-объекты, * Ряд улучшений для работы с C API на тему
вставки и сканирования данных в формате Apache Arrow.
Также повысилась производительность пропусков индексных записей (skip index writes) в MemCS. Теперь для индекса не производится аллокация блоков, если они не используются никаким представлением для чтения (read view).