Legacy · Bitrix24 · strangler-миграция
Переписать ядро оформления сделки, не останавливая продажи
Клиент:
Автомобильный маркетплейс, NDA
Категория: Legacy
Стек: PHP 8.3, Bitrix24 D7, 1С (HTTP API), feature-флаги, CLI-тесты паритета, cron
Срок: около 2 месяцев, поэтапно
Проблема
Оформление сделки — от предварительного договора до выдачи авто — держалось на легаси-скрипте, где одна только сборка пакета для 1С занимала около 2500 строк. Любая правка грозила остановить продажи во всех автоцентрах, а тестов не было.
Ограничения
Остановить продажи нельзя даже на час; легаси продолжает меняться параллельно с миграцией; проверочные отправки в боевую 1С запрещены — сверять можно только чтением.
Что сделал
- Шесть кнопок карточки сделки, страницы согласования и предпроверки перенесены в новый модуль срезами, каждый — за своим флагом
- Теневая сверка: на боевой отправке новый код собирает пакет параллельно, отправляет по-прежнему легаси, расхождение пишется в лог со структурным диффом
- Паритет-тесты против легаси: 812 проверок по воронкам, 787 по правам кнопок и сторож дрейфа по md5 49 легаси-файлов
- Трёхпозиционные флаги «всем / пилот / никому» и откат одной командой — для функции, сотрудника или всего пилота
- Порт догнал легаси по второй воронке — авто с пробегом — и по всем правкам, внесённым в легаси за время миграции
Архитектура
Флаг на каждый запрос
→ Новый модуль или легаси
→ Теневая сверка пакета
→ Клиент 1С
→ Паритет-тесты и сторож дрейфа
Результат
Новое ядро готово и выкатывается на прод в сентябре 2026 по флагам: теневая сверка совпала в 468 из 468 отправок, паритет-тесты зелёные, а старый код остаётся запасным путём до полного переключения.
Что можно переиспользовать
Strangler-схема с флагами «всем / пилот / никому»
Теневая сверка нового кода на боевом трафике
Сторож дрейфа легаси по md5