AACsearch
Руководства по миграции

Чек-лист миграции

Dry run, валидация, cutover, откат — чек-лист на день переключения.

Чек-лист миграции

Чек-лист на день переключения дополняет per-source гайд. Можно копировать в launch-тикет.

До начала

  • Прочитан per-source гайд (database, Algolia, Elasticsearch, Meilisearch, Typesense).
  • Заведены организация, проект и минимум один API-ключ — см. API-ключи.
  • Схема описана и отревьюирована (имена, типы, кандидаты query_by/filter_by/sort_by).
  • Решена модель арендатора: single или per-tenant индекс. См. Изоляция арендаторов.
  • Решена модель cutover: dark-launch или окно отката. См. обзор.
  • 100 запросов из аналитики готовы для валидации.

Dry run

В staging-проекте минимум за 48 часов до cutover.

  • Создан индекс AACsearch в staging с выбранной схемой.
  • Прогнан экспорт из источника — замерено время на полный корпус.
  • Прогнан импорт в AACsearch — замерены ingest lag и время полного flush.
  • searchIndex.getHealth.driftPercent < 5 %.
  • 100-query валидация. Классификация identical / mostly-same / drift.
  • Триаж drift: фикс в схеме (чаще всего), в query_by_weights или в курации.
  • Повторный dry run после фиксов — drift падает.
  • Запомнили время полного импорта (нужно для реального cutover).

Валидация

После dry run, до flip-а прода:

  • Doc count: count(*) источника = searchIndex.getHealth.actualDocCount.
  • Все 100 запросов возвращают результаты (нет неожиданно пустых).
  • Top-5 для ≥ 80 % запросов стабилен между прогонами (нет случайного порядка).
  • Facet counts на сэмпл-запросе совпадают между staging и источником ±1 %.
  • Filter-запросы (price < X, category = Y) возвращают те же документы.
  • Sort-запросы (createdAt:desc) — те же порядки.
  • Негативный тест изоляции: scoped-токен арендатора A, поиск известного документа B → 0 хитов. См. Изоляция арендаторов.
  • Пустой query (без q) — фасеты без хитов, без 5xx.
  • Unicode-query (диакритика, кириллица, CJK) — ожидаемые результаты.
  • Очень длинный query (>500 символов) — gracefully.
  • Query с операторами ("phrase match", -excluded) — как в документации.

Pre-cutover

В сутки до:

  • Cutover назначен на тихое окно (бизнес знает когда).
  • Информированы: инженерия, саппорт, ops, customer-success.
  • Если есть статусная страница — черновик maintenance-notice готов, не опубликован.
  • Путь отката проверен: старый поднимет трафик при flip-back.
  • Мониторинг подключён — см. Мониторинг. Четыре сигнала должны алертить.
  • On-call расписан на окно + 4 часа после.
  • Финальный импорт из источника в прод-индекс. (Если у вас delta sync — последний полный, перед началом delta.)
  • Doc count в проде совпадает.

Cutover

Окно само.

  • T-0: Все за клавиатурой. Статусная страница опубликована.
  • T-0+0: Финальный delta sync из источника (если применимо).
  • T-0+5: Doc count в AACsearch = источник.
  • T-0+5: Flip feature flag / конфига маршрутизации поиска на AACsearch.
  • T-0+10: 100-query валидация в проде.
  • T-0+15: Четыре сигнала мониторинга — зелёные.
  • T-0+15: Sentry / error tracker — без новых классов ошибок.
  • T-0+30: Baseline latencyMs из прод-телеметрии. Сравнение с источником.
  • T-0+60: Статусная страница — operational. Внутренний нотис разослан.

Если шаг падает — откат.

После cutover

  • Первый час: on-call ревью search-аналитики — zero-result, click-through.
  • Первые 4 часа: старый читает. Спот-чек top-результатов на сэмпле живых запросов.
  • Первые 24 часа: ревью алертов. Тюнинг шумных.
  • Первые 7 дней: старый — тёплый (без записей). Готовы flip-back.
  • День 7: decom старого. Снять флаг отката из приложения.
  • День 14: post-migration ретро. Что работало, что нет, что фиксить.

Откат

Во время/сразу после cutover миграция явно плоха (битые результаты, ошибки > 0.1 %, latency × 2):

  • Flip feature flag обратно на старый. Секунды.
  • Проверить: старый обслуживает трафик, результаты корректные.
  • Расследование offline — не повторять cutover до root cause.
  • Коммуникация: статусная страница, внутренний нотис, ретро запланировано.

Откатный флаг — одна строчка конфига. Если нужен code deploy — слишком медленно; чините до cutover, не во время.

Что значит «всё хорошо» к 7-му дню

  • Zero-result rate такой же (или ниже) старого.
  • CTR на top-3 такой же или лучше.
  • p95 latency на уровне старого или ниже.
  • В фидбеке нет новых паттернов («поиск ощущается иначе» без специфики — ОК; «не находит вчера проданный товар» — нет).
  • Четыре сигнала держат зелёный 96+ часов.

Зелёные — выводим старый по графику. Жёлтые на 7-й день — продлеваем окно отката; fallback, который может ещё пригодиться, не выводим.

См. также

On this page