Към съдържанието
N1
Legacy · Bitrix24 · strangler миграция

Пренаписване на ядрото за оформяне на сделки, без да се спират продажбите

Клиент: Автомобилен маркетплейс, NDA Категория: Legacy Стек: PHP 8.3, Bitrix24 D7, 1С (HTTP API), feature флагове, CLI паритетни тестове, cron Срок: около 2 месеца, поетапно
Проблем

Оформянето на сделката — от предварителния договор до предаването на автомобила — се крепеше на legacy скрипт, в който само сглобяването на пакета за 1С заемаше около 2500 реда. Всяка промяна заплашваше да спре продажбите във всички автоцентрове, а тестове нямаше.

Ограничения

Продажбите не могат да се спрат дори за час; legacy кодът продължава да се променя паралелно с миграцията; тестови изпращания към продукционната 1С са забранени — сверяването е възможно само чрез четене.

Какво направих
  • Шест бутона от картата на сделката, страниците за съгласуване и предварителна проверка са пренесени в новия модул на части, всяка — зад собствен флаг
  • Сенчесто сверяване: при реално изпращане новият код сглобява пакета паралелно, изпращането продължава да минава през legacy, а разминаването се записва в лога със структуриран diff
  • Паритетни тестове срещу legacy: 812 проверки по фунии, 787 по правата за бутоните и наблюдател за дрейф по md5 на 49 legacy файла
  • Флагове с три позиции „всички / пилот / никой“ и връщане назад с една команда — за функция, служител или целия пилот
  • Портът настигна legacy по втората фуния — употребявани автомобили — и по всички промени, внесени в legacy по време на миграцията
Архитектура
Флаг за всяка заявка → Нов модул или legacy → Сенчесто сверяване на пакета → Клиент за 1С → Паритетни тестове и наблюдател за дрейф
Резултат

Новото ядро е готово и се пуска в продукция през септември 2026 чрез флагове: сенчестото сверяване съвпадна в 468 от 468 изпращания, паритетните тестове са зелени, а старият код остава резервен път до пълното превключване.

Какво може да се преизползва
Strangler схема с флагове „всички / пилот / никой“ Сенчесто сверяване на новия код върху реалния трафик Наблюдател за дрейф на legacy по md5