Tarantool 2.6 - Менеджер Транзакций

preview_player
Показать описание

Рекомендации по теме
Комментарии
Автор

Я увидел такой комментарий:
"Mons Anderson​: Зачем тебе fsync?"
и послушал монолог про fsync.

Меня переполняют разные эмоции и я полон возмущений.

Во-первых, системный вызов write никаких гарантий не даёт, что данные записались (вы сами сказали, что кеши встречаются на разных уровнях хранения ниже: OS cache, raid cache, disk cache).

Во-вторых, после write и смерти tarantool ОС скинет буферы в файл, но только НЕ в случае, если пропадёт питание, kernel panic.

В-третьих, не надо говорить, что fsync не гарантирует сброс данных на диск, так как у диска свои буфера. Вообще говорить-то про это можно, конечно, но вот только системы хранения нужно брать такие, которые обеспечивают корректную работу СУБД в таких ситуациях. Поэтому для БД не берут какие угодно диски (и ОС тоже), а берут диски (и ОС), которые гарантированно пишут на диск в случае fsync. Если у вас RIAD используется (у него тоже кеш бывает), то его тоже тестирует на сохраняемость данных.

Если прилетит метеорит (ракета) или будет пожар в серверной и т.д., то в этом случае поможет только СИНХРОННАЯ репликация. Не знаю, зачем вдаваться в такие крайности, очевидно, что можно любую крайность придумать для любой сколько угодно надежной системы.

Почему я считаю, что это важно?
Потому что, если Вася перевёл Пете 100 руб и система ответила, что всё ОК, а потом пропало питание или kernel panic, то после восстановления никаких сюрпризов быть не должно, потому что Петя на эти деньги отдал Васе товара. Что должен Петя сделать в случае, когда вы восстановитесь?

Может быть tarantool не подходит для того, чтобы перводить деньги? Т.е. имеет другой кейс использования, к примеру, ТОЛЬКО кешировать данные. Тогда напишите об этом, в каком кейсе его использовать.

logioniz
Автор

Не правда: если делаете cross-engine транзакции и хотите полную сериализуемость, менеджеры транзакций должны общаться друг с другом. Т.е. должен быть общий менеджер, хотя бы в виде надстройки над обоими.
Простейший пример: по мемтиксу А сериализуемо перед Б, по винилу Б сериализуемо перед А, а вместе не сериализуемо.

TheFunnyFalcon