Согласованность копий: почему значения временно различаются

Изменение может попасть в одну копию раньше другой. Объясняем отложенную согласованность и её ограничения на понятном примере.

Два лотка с одинаковыми карточками соединены лентой, по которой перемещается обновлённая оранжевая карточка.

Одна запись, несколько мест хранения

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

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

Что означает отложенная согласованность

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

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

Условный пример двух пунктов выдачи

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

Пауза зависит от нагрузки, связи и механизмов обмена. Сам термин «отложенная согласованность» не задаёт универсальное число секунд. Если связь нарушена, ожидание может увеличиться. Отсутствие новой записи в другой копии также ещё не доказывает, что первоначальное сохранение было отменено.

Почему более свежий экран может смениться старым

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

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

Более строгая согласованность — другой компромисс

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

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

Какие вопросы задать владельцу системы

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

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

Как перейти к практике

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

Архитектор данных
Курс
Новинка
Архитектор данных

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

С нуля
Теория и практика
Диплом по окончании
12 990
₽/мес
Узнать подробнее

Что почитать рядом

Первичные источники

Читайте также

Обучить команду или нанять специалиста по данным: как выбрать
47

Обучить команду или нанять специалиста по данным: как выбрать

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

Вертикальное и горизонтальное масштабирование данных: в чём разница

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

Журнал изменений данных: как выяснить, кто и когда изменил набор

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

Занятия проходят
в Нова Дата СДО

Вебинары, практика и общение с преподавателем — в одном окне браузера.

Посмотреть интерфейс платформы
Календарь обучения в Нова Дата СДО
Курсы студента в Нова Дата СДО
Редактор кода для практики в Нова Дата СДО
Вебинары и расписание Ваши курсы Код в браузере
Нова Дата СДО — в реестре российского ПОРеестровая запись № 34931
Заявка отправлена
Отправим вам подборку курсов в течение 5 минут. С вами также свяжется наш специалист и даст карьерную консультацию.
Персональный промокод
На курс «Инженер по парсингу данных»
Введите код при оплате, чтобы применить скидку к программе.