Перейти к содержанию

ADR-0002 · Переход: перенос данных и обратимость — одной записью#

Статус:    принят · 2026-09-18
Метод:     D-08 v1.0 · D-09 v1.0 · шаблон ADR v1.2
Участники: команда (9 человек), юрист, владелец направления

Учебная запись: часть узкого прогона U-01, система вымышлена. Форма и рассуждение настоящие.

Связанные решения, записанные одним ADR — по мастер-шаблону: общий контекст, отдельные короткие записи по каждому, общие последствия. Правило введено в v5.0 по трём наблюдениям и применяется впервые.

Общий контекст#

Вход — 00-context.md; состав передаваемого — ADR-0001.

Что Значение
Передаётся 6,2 млн клиентов, 1,9 ТБ; у 1,1 млн — урезанный состав по ADR-0001
Темп изменений 40 тыс. в сутки [замер]
Писатели 14 по коду, 3 по правам доступа не опознаны [схема]
Сплошная сверка Профили 4 часа; вложения — около суток из-за лимита на запросы к объектному хранилищу [расчёт]
Дата Назначена договором, через 7 месяцев; окно сосуществования 5 месяцев [договор]
Внешние потребители 22 партнёра по вебхукам; выгрузка перестраховщику ежемесячно [схема]
Приёмник Чужая организация. Ни метрик, ни доступа, ни отката

Общее у двух решений — окно, дата и точка невозврата. Разное — то, что именно в них необратимо, и это выяснилось только при записи.


Запись 1 · Перенос данных · D-08#

Семь вопросов#

Вопрос Ответ
Что переезжает 1,9 ТБ, 6,2 млн клиентов, 40 тыс. изменений в сутки
Все ли писатели известны Нет: трое по правам доступа не опознаны. Дисквалификатор
Чем сверять и сколько стоит Счётная — дёшево и постоянно; выборочная — постоянный режим; сплошная возможна примерно один раз, около суток
Сколько можно быть недоступным Нисколько: обслуживание проданных полисов не прерывается ни на минуту [договор]
Что с данными, записанными во время переезда 40 тыс. в сутки — догон из журнала изменений
Кто читает и умеет ли из обоих 22 партнёра и перестраховщик читают у нас; после даты должны читать у покупателя. Переключение их — отдельная работа
Где точка невозврата Первая переданная когорта, а не дата: переданные ПДн не отзываются

Дисквалификаторы#

Условие Что вышло
Сверки нет Не сработал
Писатели известны не все Сработал. Трое неопознанных разбираются до начала: иначе приёмник разойдётся молча
Переключение без подтверждения догона Сработал. Подтверждение строится: счётная сверка по когорте плюс нулевой лаг журнала изменений — предусловие, а не проверка
Двойная запись без единого источника порядка Не сработал: до даты пишем только мы, после — только покупатель
Не назначен срок и владелец снятия старого пути Сработал. Старый путь — наше обслуживание проданных полисов и наши копии их данных

Форма#

Связка из трёх, ровно как описывает D-08: двойное чтение со сравнением как проверка → копия плюс догон как перенос → по ключу когортами как порядок.

Что Как
Порядок 10 когорт по 620 тыс. клиентов, по одной в две недели — 20 недель из 22 доступных [расчёт]
Перенос Снимок когорты, затем догон из журнала изменений до нулевого лага
Сверка на когорте Счётная при переносе, выборочная постоянно
Сверка перед точкой невозврата Сплошная, один раз — на первой когорте, около суток. Дальше сплошная не повторяется: её цена не позволяет

Решение#

Когортами, с догоном, при трёх степенях сверки на разных участках. Точка невозврата — первая переданная когорта; до неё переход обратим целиком, после — только вперёд. Срок снятия старого пути — дата плюс 30 суток; владелец — владелец направления.

Замечание: ось обратимости не различает двух вещей#

D-08 называет когорты главным источником обратимости: «когорты дают откат, которого не даёт ничто другое». Здесь они его не дают.

Что когорта даёт Что не даёт
Операционный откат: остановить передачу следующих когорт Информационный откат: вернуть уже переданное

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


Запись 2 · Обратимость перехода · D-09#

Состояние мира#

Что Чем опасно
Схема Флаг «обслуживается покупателем» на полисе
Сообщения в очередях Вебхуки 22 партнёрам: событие по переданному полису, отправленное до переключения, дойдёт после
Кэши Профили спорных клиентов
Внешние контракты 22 партнёра и перестраховщик обязаны узнать, куда ходить после даты (D-11 — обещание им не давалось вовсе)
Конфигурация Маршрутизация обращений

Дисквалификаторы#

Условие Что вышло
Состояние мира несовместимо, а план отката записан Не сработал — план записан честно, см. решение
Критерий отката не выражен числом Сработал. Что значит «стало хуже» при передаче? Выражено: расхождение счётной сверки по когорте выше 0,01 % записей
Откат ни разу не исполнялся Сработал. Обратная процедура пробуется на первой когорте, до передачи
Необратимое выполняется раньше, чем выкат признан удачным Сработал, и это главное. Передача когорты и есть необратимое действие. Отодвинуть его за подтверждение — единственная защита
Сообщения новой версии прочитает старая Сработал. Вебхуки в очереди переживут переключение

Решение: степень обратимости назначается по частям#

Часть перехода Степень Чем обеспечена
Код и маршрутизация Полная Переключение; состояние мира совместимо в обе стороны
Флаг и наши копии переданных данных Условная Восстановление из резервной копии — процедура со своим риском, доступна 60 суток
Передача ПДн покупателю Отсутствует Не обеспечена ничем. Заменена способом жить с ошибкой: сплошная сверка до первой передачи и остановка передачи следующих когорт

Необратимое отодвинуто за подтверждение: когорта передаётся только после счётной сверки с расхождением ниже 0,01 % и подтверждённого нулевого лага.

Замечание: D-09 требует одну степень, а их три#

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

D-09 даёт таблицу состояния мира по строкам — но степень спрашивает одну на всё. Строки состояния мира и есть части, по которым степень различается, и документ останавливается в шаге от этого.


Общие последствия#

Отрицательные:

  • 16 человеко-месяцев двойной правки — 35 % к каждой задаче девяти человек на пять месяцев. Это работа, не меняющая ничего.
  • Трое неопознанных писателей разбираются до начала, и разбор может обнаружить то, что сдвинет дату. Договорную дату сдвинуть нельзя.
  • Сплошная сверка возможна один раз, и она израсходована на первой когорте. Девять оставшихся идут на счётной и выборочной — то есть на вере в то, что механизм, проверенный однажды, не испортился.
  • Переданное не возвращается. С первой когорты и до конца переход идёт только вперёд, и единственная защита — остановка следующих.
  • Партнёров придётся переключать отдельно, и обещания совместимости им никогда не давалось: 22 вебхука работают по факту, а не по договорённости.
  • Мы не узнаем, что происходит на приёмнике. Ни сверки после передачи, ни метрик, ни подтверждения удаления по требованию клиента.

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

Общие условия пересмотра#

  • Трое неопознанных писателей опознаны — или выяснилось, что один из них пишет в передаваемые данные: состав и порядок пересчитываются.
  • Расхождение счётной сверки превысило 0,01 % на любой когорте — передача следующих останавливается.
  • Догон перестал успевать за 40 тыс. изменений в сутки.
  • Дата сдвинулась договором — единственный способ её сдвинуть.
  • Появилось требование стирания от переданного клиента — проверить, что путь требования доходит до приёмника.
  • Партнёр не переключился к дате — вебхуки по переданным полисам уходят в никуда.

Самая дорогая будущая граница#

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

Связанные ADR#

Зависит от: ADR-0001 — состав передаваемого.