Как восстановить архитектуру legacy-системы, когда никто не знает кода целиком
Представьте: вам поручили доработать высоконагруженную подсистему аудита. Документации много, но никто не может объяснить, как система работает целиком. Именно в такой ситуации оказался разработчик, чей опыт лёг в основу этой статьи. Без полного понимания архитектуры любое изменение рискует сломать

Представьте: вам поручили доработать высоконагруженную подсистему аудита. Документации много, но никто не может объяснить, как система работает целиком. Именно в такой ситуации оказался разработчик, чей опыт лёг в основу этой статьи. Без полного понимания архитектуры любое изменение рискует сломать что-то важное. Как восстановить целостную картину, когда у вас есть только разрозненные куски кода, Kafka, базы данных и фактическое поведение системы? Ответ — в системном подходе, который мы разберём по шагам.
Почему восстановление архитектуры legacy-системы — это сложная задача
Проблема незнания системы целиком типична для крупных проектов, которые развивались годами. Разработчики приходили и уходили, оставляя после себя фрагменты знаний. Документация устаревала, а новые фичи добавлялись без общего плана. В результате система превратилась в «лоскутное одеяло», где каждый сервис живёт своей жизнью. Подсистема аудита особенно критична, так как должна гарантировать целостность и неизменность записей. Любая ошибка может привести к потере данных или нарушению комплаенса. Поэтому восстановление архитектуры стало не просто задачей, а необходимостью.
Как восстановить архитектуру legacy-системы без единого эксперта?
Главный совет — не полагаться на одного человека. Даже если кто-то утверждает, что знает систему, проверьте его знания на практике. Разработчик в статье использовал метод «архитектурных сессий», где собирал всех заинтересованных и рисовал диаграммы на доске. Но важнее всего — эмпирическая проверка: он поднимал окружение, прогонял запросы и смотрел, какие сервисы реально вызываются. Так он обнаружил, что некоторые микросервисы, считавшиеся ключевыми, на самом деле не участвовали в обработке аудита. Инструменты вроде Jaeger для трассировки и Prometheus для метрик помогли визуализировать потоки данных.
Пошаговый план восстановления архитектуры legacy-системы
Шаг 1: Сбор всей доступной информации
Начните с того, что соберите всё, что можно: репозитории кода, схемы баз данных, конфигурации Kafka, логи и метрики. Но ключевым стало не просто чтение документации, а анализ того, как система ведёт себя в реальности. Запускайте тестовые сценарии, отслеживайте потоки данных и сравнивайте их с ожидаемым поведением. Это позволит выявить расхождения между документацией и реальностью. Например, некоторые сервисы, описанные в документации, уже не использовались, а другие, наоборот, работали, но не были задокументированы. Такой подход требует времени, но он единственный способ получить достоверную картину.
Шаг 2: Анализ Kafka, баз данных и кода
Особое внимание уделите Kafka — центральной шине данных. Проанализируйте все топики, их ключи и схемы сообщений. Для этого придётся написать скрипты, которые собирают метаданные и строят граф зависимостей. Базы данных исследуйте через обратное проектирование: смотрите на внешние ключи, индексы и триггеры. Код читайте не подряд, а фокусируйтесь на точках входа и вызовах внешних сервисов. В результате вы создадите карту архитектуры, где каждый компонент описан с указанием его ответственности и протоколов взаимодействия. Этот документ станет основой для дальнейших доработок.
Шаг 3: Визуализация потоков данных
Используйте инструменты трассировки, такие как Jaeger, чтобы увидеть, как запросы проходят через систему. Prometheus поможет собрать метрики производительности. Постройте граф зависимостей сервисов и выделите узкие места. Это позволит понять, какие компоненты критичны для работы подсистемы аудита, а какие можно оптимизировать или удалить.
Шаг 4: Документирование и валидация
Создайте документ с описанием архитектуры: диаграммы, описание каждого сервиса, протоколы взаимодействия, зависимости. Проведите ревью с командой, чтобы убедиться, что никто не упустил важных деталей. Затем проверьте документ на практике: выполните несколько тестовых сценариев и убедитесь, что поведение системы соответствует описанию.
Кому пригодится этот подход
Описанный метод будет полезен разработчикам, архитекторам и техническим лидам, работающим с legacy-системами. Особенно актуален он для компаний, которые переходят на микросервисы или проводят рефакторинг. В российских реалиях, где многие проекты имеют долгую историю и слабую документацию, такой подход может сэкономить недели работы. Для бизнеса это снижение риска сбоев при изменениях. Для разработчиков — уверенность в том, что они не сломают что-то важное.
Что будет дальше: автоматизация и observability
Разработчик планирует автоматизировать процесс: создать инструмент, который будет регулярно собирать метрики и сравнивать их с эталонной архитектурой. Это позволит быстро выявлять расхождения. В индустрии всё больше внимания уделяется observability — наблюдаемости систем. Возможно, скоро появятся стандартные практики для восстановления архитектуры по фактическому поведению, которые войдут в учебники. Но пока что главный совет — не лениться и проверять всё на практике.
Итог: как восстановить архитектуру legacy-системы и не сойти с ума
Знание кода в отрыве от системы — иллюзия. Только восстановив полную картину, вы сможете безопасно вносить изменения. Используйте комбинацию документации, инструментов трассировки и эмпирических тестов. И помните: даже если никто не знает систему целиком, её можно понять — если подойти к задаче системно. Начните с малого, документируйте каждый шаг и проверяйте гипотезы на реальных данных. Со временем пазл сложится, и вы получите чёткое представление о том, как работает ваша legacy-система.