Модернизация на монолит от 823 000 реда — без спиране и без голям взрив
Жива платформа на .NET Framework 4.8 с 54 проекта и 23 000 commit-а история, модернизирана поетапно към .NET 10 — старата система продължава да работи, докато новата поема секция по секция. 19 секции с тестове за около 8 дни.
- 823 000 реда наследен код
- 19 секции за ~8 дни
- SSO без промяна по старата система
- 175 теста от първия ден
Клиентът
Американска платформа за бизнес директории и реклама, работеща от близо две десетилетия: потребители, търговци, дистрибутори, плащания, спорове по транзакции, интеграции с рекламни мрежи. Жив бизнес с реални приходи — и кодова база, която никой не смееше да пипне.
Предизвикателството
Системата: 823 000 реда C# в 54 проекта, .NET Framework 4.8, WebForms страници отпреди повече от десетилетие, 581 таблици в модела на данните и над 23 000 commit-а история. Всичко минава през едно централно "хъб" приложение, от което зависят осем отделни сайта и услуги.
Класическата дилема: пълно пренаписване е твърде рисковано и скъпо, а поддръжката на статуквото става все по-скъпа — старите технологии не се поддържат, нови разработчици не искат да работят с тях, всяка промяна е опасна.
Подходът
Избрахме поетапна модернизация ("strangler fig"): новата система расте до старата и поема функционалност страница по страница, а потребителите не усещат нищо.
- Инвентаризация преди код. Всички 123 административни страници бяха описани и приоритизирани. Още на този етап ~30 от тях се оказаха мъртви или дублирани — пенсионирахме ги, без да пренесем и ред. По-малък обхват, по-ниска цена.
- Незабележим преход. Новото приложение работи на същия адрес, зад същия вход. Потребителят се логва в старата система и превключва към новите страници без втори login — без нито една промяна по стария код.
- Пренасяме само живото. За всяка страница се проследява пълната верига бизнес логика и се пренася само това, което реално се ползва. Мъртвата логика умира, като просто не бъде пренесена.
- Тестове в същия ден. Всяка мигрирана секция излиза с автоматични тестове в същото PR — включително тестове, които сравняват поведението на новия код със стария върху едни и същи данни.
- Решенията — на хартия. Около 1 800 реда проектна документация (миграционен наръчник, анализ на зависимостите, стратегия за тестване) преди и успоредно с кода — за да може всяко решение да бъде проверено и утре, и от друг човек.
Резултатът
- 19 административни секции — платежни операции, спорове, пакети, категории, отчети — мигрирани за около 8 работни дни, със 175 автоматични теста.
- Нулев риск за работещия бизнес: старата система продължава да обслужва всичко немигрирано; преходът е невидим за потребителите.
- Модерна основа (.NET 10), върху която нови функции се добавят за часове, а не за седмици — и с която е лесно да се намерят разработчици.
- Обхватът намален още преди старта: мъртвите страници не бяха платени втори път.
Скоростта идва от AI-ускорената разработка. Сигурността — от метода: инвентаризация, тестове за съответствие и преход без голям взрив. Едното без другото не работи.
Технологии
.NET 10 · ASP.NET Core MVC · EF Core · nginx coexistence · xUnit + Playwright