stringtranslate.com

Согласованность данных

Несогласованность данных означает, совпадают ли одни и те же данные, хранящиеся в разных местах, или нет.

Согласованность на момент времени

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

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

Эти большие файлы, как и любая база данных, содержат множество структур данных, которые ссылаются друг на друга по местоположению. Например, некоторые структуры являются индексами , которые позволяют подсистеме базы данных быстро находить результаты поиска. Если структуры данных перестают правильно ссылаться друг на друга, можно сказать, что база данных повреждена .

Контрпример

Важность согласованности на определенный момент времени можно проиллюстрировать тем, что произошло бы, если бы резервная копия была создана без нее.

Предположим, что база данных Википедии представляет собой огромный файл, в котором важный индекс расположен на 20 % пути, а данные статей сохраняются на отметке 75 %. Рассмотрим сценарий, в котором редактор приходит и создает новую статью в то же время, когда выполняется резервное копирование, которое создается в виде простой « копии файла », которая копирует от начала до конца большой файл(ы) и не Я не учитываю согласованность данных — и на момент редактирования статьи она завершена на 50%. Новая статья добавляется в пространство статей (на отметке 75%), и добавляется соответствующая запись указателя (на отметке 20%).

Поскольку резервное копирование уже выполнено наполовину и индекс уже скопирован, резервная копия будет записана с присутствующими данными статьи, но с отсутствующей ссылкой на индекс. В результате несоответствия этот файл считается поврежденным.

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

Процесс резервного копирования, который должным образом учитывает согласованность данных, гарантирует, что резервная копия представляет собой снимок того, как вся база данных выглядела в определенный момент. В данном примере Википедии это гарантирует, что резервная копия будет записана без добавленной статьи на отметке 75%, чтобы данные статьи были согласованы с ранее записанными индексными данными.

Системы дискового кэширования

Согласованность на определенный момент времени также актуальна для дисковых подсистем компьютера.

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

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

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

Например, чтобы сохранить типичный файл документа или изображения, операционная система может записать на диск следующие записи в следующем порядке:

  1. Запись в журнале о том, что файл XYZ скоро будет сохранен в секторе 123.
  2. Фактическое содержимое файла XYZ записывается в сектор 123.
  3. Сектор 123 теперь помечен как занятый в записи свободного/использованного пространства.
  4. Запись в журнале, в которой отмечается, что файл полностью сохранен, его имя XYZ и он находится в секторе 123.

Операционная система исходит из предположения, что если она видит, что элемент № 1 присутствует (сообщает, что файл скоро будет сохранен), но элемент № 4 отсутствует (подтверждая успех), то операция сохранения не удалась и поэтому ее следует отменить. любые незавершенные шаги, уже предпринятые для его сохранения (например, пометка сектора 123 свободным, поскольку он никогда не заполнялся должным образом, и удаление любой записи XYZ из каталога файлов). Он основан на том, что эти элементы фиксируются на диске в последовательном порядке.

Предположим, алгоритм кэширования определяет, что быстрее всего будет записать эти элементы на диск в порядке 4-3-1-2, и начинает это делать, но питание отключается после записи 4, до того, как будут записаны 3, 1 и 2, и поэтому такие записи никогда не происходят. Когда компьютер снова включится, файловая система покажет, что он содержит файл с именем XYZ, который расположен в секторе 123, но на самом деле этот сектор не содержит этого файла. (Вместо этого сектор будет содержать мусор, нули или случайную часть какого-то старого файла - и это то, что будет видно, если файл открыт).

Кроме того, карта свободного пространства файловой системы не будет содержать записей, показывающих, что сектор 123 занят, поэтому позже она, скорее всего, назначит этот сектор следующему сохраняемому файлу, полагая, что он доступен. В этом случае в файловой системе появятся два файла, оба неожиданно претендующие на один и тот же сектор (известный как файл с перекрестными ссылками ). В результате запись в один из файлов перезапишет часть другого файла, незаметно повредив его.

Подсистема кэширования диска, обеспечивающая согласованность на определенный момент времени, гарантирует, что в случае неожиданного завершения работы четыре элемента будут записаны одним из пяти возможных способов: полностью (1-2-3-4), частично (1, 1-2, 1-2-3), или не иметь вообще.

Высокопроизводительные аппаратные контроллеры дисков, подобные тем, которые используются на серверах, включают в себя небольшой резервный аккумулятор в своей кэш-памяти, чтобы они могли обеспечить прирост производительности за счет кэширования записи, одновременно снижая риск непреднамеренных отключений. Резервный аккумулятор поддерживает питание памяти даже во время выключения, поэтому при включении резервного питания компьютер может быстро завершить любые операции записи, выполненные ранее. С таким контроллером операционная система может запросить четыре записи (1-2-3-4) в этом порядке, но контроллер может решить, что самый быстрый способ их записи — 4-3-1-2. Контроллер, по сути, лжет операционной системе и сообщает, что запись завершена правильно (ложь, которая повышает производительность за счет повреждения данных в случае отключения питания), а резервная батарея защищает от риска повреждения данных, предоставляя Контроллер – это способ бесшумно устранить любой ущерб, который может возникнуть в результате.

Если питание отключается после записи элемента 4, память с батарейным питанием содержит записи о фиксации остальных трех элементов и гарантирует, что они будут записаны («сброшены») на диск при следующей доступной возможности.

Согласованность транзакций

Согласованность (системы баз данных) в области распределенных систем баз данных относится к свойству многих баз данных ACID , обеспечивающему видимость результатов транзакции базы данных для всех узлов одновременно. То есть, как только транзакция будет зафиксирована, все стороны, пытающиеся получить доступ к базе данных, смогут одновременно увидеть результаты этой транзакции.

Хорошим примером важности согласованности транзакций является база данных, которая обрабатывает перевод денег. Предположим, денежный перевод требует двух операций: записи дебета в одном месте и кредита в другом. Если система дает сбой или выключается, когда одна операция завершилась, а другая нет, и нет ничего, что можно было бы исправить, можно сказать, что системе не хватает согласованности транзакций. При переводе денег желательно, чтобы либо завершилась вся транзакция, либо не завершилась ни одна ее часть. Оба этих сценария держат баланс под контролем.

Согласованность транзакций гарантирует именно это: система запрограммирована на возможность обнаруживать незавершенные транзакции при включении и отменять (или «откатывать») часть любых обнаруженных незавершенных транзакций.

Согласованность приложений

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