499,13
Рейтинг
Mail.ru Group
Строим Интернет
30 октября

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

Блог компании Mail.ru GroupВысокая производительностьАдминистрирование баз данных

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

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


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

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

Сейчас новый менеджер работает только опционально. Следующий шаг — включить его по умолчанию. Мы всерьез думаем о добавлении так называемых cross-engine транзакций. Это когда в одной транзакции можно манипулировать данными из двух движков. Например, когда из холодного хранилища (vinyl) нужно перенести данные в горячее хранилище (memtx).

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


Синхронная репликация на протяжении существования Tarantool была одной из самых (если не самой-самой) востребованных возможностей. Все дело в том, что асинхронная репликация не дает 100% гарантий сохранности данных при работе в кластере, когда происходит смена лидера.

5 лет назад началось проектирование и разработка синхрона на базе популярного алгоритма Raft. За эти пять лет буквально каждый пункт плана пошел под откос. В Tarantool за это время сделали SQL, дисковый движок, шардинг, и многое другое. Состав команды успел смениться почти полностью, включая CTO.

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

С синхронной репликацией хранение данных в кластере получает новый уровень гарантий сохранности. В прошлом отказа одного узла было уже достаточно, чтобы получить риск потери. С синхронной репликацией данные гарантированно выживут, пока больше половины кластера функционирует.

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

На этом путь синхронной репликации еще не окончен. В следующих релизах будут проводиться работы по различным оптимизациям, создание специальных вспомогательных узлов для выборов лидера, и следующая большая разработка — синхронная мастер-мастер репликация без выделенного лидера.

А что еще?


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

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



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



В ближайшие дни мы проведем эфир с разработчиками из core-команды, которые подробно расскажут и покажут вам новые фичи:

  • Менеджер транзакций — в понедельник 2 ноября, 18:00 МСК.
  • Raft — во вторник 3 ноября, 18:00 МСК.
  • Синхронная репликация — в четверг 5 ноября, 18:00 МСК.

Все трансляции пройдут на нашем Youtube-канале.

UPD

Пример по выборам лидера:
github.com/tarantool/examples/tree/master/cookbook/election

Пример по синхронной  репликации:
github.com/tarantool/examples/tree/master/cookbook/synchro
Теги:tarantool 2.6
Хабы: Блог компании Mail.ru Group Высокая производительность Администрирование баз данных
+33
2,4k 5
Комментарии 22
Похожие публикации
▇▅▄▅▅▄ ▇▄▅