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 — состав передаваемого.