Введение

В системах баз данных долговечность — это свойство ACID, которое гарантирует, что последствия завершённых транзакций будут сохранены постоянно, даже в случае сбоев, включая инциденты и катастрофические события. Например, если при бронировании места в авиарейсе сообщается об успешном бронировании, то место останется забронированным, даже если система выйдет из строя. Формально, система баз данных обеспечивает свойство долговечности, если она устойчива к трём типам сбоев: сбоям транзакций, системным сбоям и сбоям носителей информации. Такие прерывания могут возникать на уровне транзакций из-за ошибок ввода данных, отмены оператором, истечения времени ожидания или ошибок, специфичных для приложения, например, попытки снять деньги с банковского счёта при недостаточном количестве средств. В частности, механизм обеспечения надёжности требует примитивов, которые явно указывают начало, завершение и откат транзакций, либо ведение журнала и блокировки. Причина выбора между использованием энергозависимого хранилища, подверженного таким сбоям, и энергонезависимого хранилища заключается в различиях в производительности существующих технологий, используемых для реализации этих типов хранилищ. Однако ситуация, вероятно, изменится по мере роста популярности технологий энергонезависимой памяти (NVM). В системах, включающих энергонезависимое хранилище, долговечность может быть достигнута путём ведения и сброса в энергонезависимое хранилище неизменяемого последовательного журнала транзакций перед подтверждением их завершения. Благодаря свойству атомарности, транзакции можно рассматривать как единицу работы в процессе восстановления, который гарантирует долговечность при использовании журнала. В частности, механизм ведения журнала называется протоколом записи вперёд (WAL) и обеспечивает долговечность, буферизируя изменения на диске перед их синхронизацией с оперативной памятью. Таким образом, путём восстановления из файла журнала все завершённые транзакции устойчивы к системным сбоям, поскольку их можно повторно выполнить. Незавершённые транзакции, напротив, могут быть восстановлены, поскольку их операции записываются в энергонезависимое хранилище до того, как они фактически изменят состояние базы данных. Таким образом, частично выполненные операции можно отменить, не затрагивая состояние системы. После этого незавершённые транзакции могут быть повторно выполнены. Следовательно, журнал транзакций из энергонезависимого хранилища может быть повторно обработан для воссоздания состояния системы непосредственно перед любым последующим системным сбоем. Стоит отметить, что ведение журнала осуществляется как комбинация отслеживания данных и операций (то есть транзакций) в целях повышения производительности.

Уровень СМИ

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

Распределенные базы данных

В распределенных транзакциях обеспечение долговечности требует дополнительных механизмов для сохранения согласованной последовательности состояний на всех узлах базы данных. Это означает, например, что одного узла недостаточно для принятия решения о завершении транзакции подтверждением (commit). Фактически, ресурсы, используемые в этой транзакции, могут находиться на других узлах, где одновременно выполняются другие транзакции. В противном случае, в случае сбоя, если согласованность не может быть гарантирована, будет невозможно подтвердить безопасное состояние базы данных для восстановления. Поэтому все участвующие узлы должны координироваться перед подтверждением commit. Обычно это осуществляется с помощью двухфазного протокола. Кроме того, в распределенных базах данных протоколы журналирования и восстановления также должны учитывать особенности распределенных сред, такие как взаимоблокировки (deadlocks), которые могут препятствовать устойчивости и восстанавливаемости транзакций и, следовательно, долговечности. Широко используемым семейством алгоритмов, обеспечивающих эти свойства, является ARIES (Algorithms for Recovery and Isolation Exploiting Semantics).