Реализовать функционал создания бэкапов (или снапшотов) в СУБД непросто. Задача вдвойне сложнее, когда это нужно сделать в распределённой СУБД. Втройне — когда СУБД поддерживает распределённые транзакции. Тем не менее любой хороший Crash Recovery-план содержит противоречивые пункты — «Иметь под рукой полный бэкап» и «Обеспечить RPO в пределах 5 минут».
Мы реализовали в Ignite алгоритм «Consistent Cut» для снятия инкрементальных снапшотов. В докладе расскажу, как нам удалось сделать снятие максимально незаметным для пользователя, а восстановление каждого узла полностью автономным. Обсудим, про что не нужно забывать при разработке production-фичи, даже если ослеплен красотой алгоритма.