Tarantool 2.6 — синхронная репликация, Raft и MVCC

fspbpcteetjrhhuiidohu_gzndg.png


В Tarantool 2.6 появились новые инструменты: транзакционный менеджер в in-memory движке с MVCC и синхронная репликация на основе алгоритма Raft. Под катом вы найдёте краткие описания основных нововведений и ссылку на полный список изменений.

Транзакционный менеджер


ca4289c144939943ca7e591234b884fd.png


Как вы знаете, Tarantool реализует кооперативную многозадачность. В нём есть специальная сущность: файбер, который является вариантом coroutine. Ранее, когда coroutine с открытой транзакцией передавала управление дальше, транзакция автоматически откатывалась. Теперь транзакция не откатывается, остается открытой и может быть закончена при следующей передаче управления coroutine. Для этого мы добавили новый менеджер транзакций.

Чем полезен новый транзакционный менеджер? Его основная цель — избавиться от давней проблемы «грязных чтений» транзакций, которые впоследствии не удалось записать на диск из-за отказа. Это повышает уровень изоляции до истинного Serializable при любом исходе. Но также это позволяет использовать Tarantool в более привычном для БД сценарии, растягивая транзакцию во времени и исполняя транзакции параллельно.

Сейчас новый менеджер работает только опционально.

Синхронная репликация


748bd1a17947aac488a75d8cc7ff5c3e.png


В Tarantool появилась синхронная репликация с автоматическими выборами лидера на основе алгоритма Raft. Благодаря этому хранение данных в кластере получает новый уровень гарантий сохранности. Ранее из-за отказа одного узла возникал риск потери данных, а теперь они гарантированно сохранятся, пока функционирует больше половины кластера.

Также пользователям более не требуется конфигурировать лидера кластера вручную — достаточно следить, кого Tarantool выбирает сам.

А что еще?


  1. Добавили поддержку tarantool-1.10+ в модуль миграции данных из tarantool-1.5 (migrate). Теперь можно мигрировать на свежие версии Tarantool со старых.
  2. В queue исправили проблему с отпусканием задач на старте, добавили возможность стартовать в режиме read-only, прояснили сообщения об ошибках.
  3. Исправили ряд проблем в коннекторах и модулях.
  4. Добавили форматированный вывод в селектах.

    Обычный селект:

    0844aee43b7c80adc07727a7ccb00cc4.png

    Новый селект:

    f994fa93941331bb83b36a811d8dc66d.png


Полный список изменений тут.

© Habrahabr.ru