Привет! Меня зовут Яна, я – старший системный аналитик в компании «Совкомбанк Технологии».

В работе чаще всего сталкиваюсь со сложными распределенными системами, большим количеством интеграций и микросервисной архитектурой. На одном из недавних проектов удалось применить модель C4, впоследствии ставшей одним из основных инструментов для проектирования, анализа и коммуникации между участниками команды – именно этим практическим опытом хочу поделиться в статье.

В современном мире системному аналитику в ИТ-проектах все чаще приходится сталкиваться со сложными распределенными системами, большим количеством интеграций и различными смежными командами разработки. Архитектура таких систем быстро усложняется, требования к ним увеличиваются, а темп разработки растет.

В условиях, когда система состоит из десятков сервисов и микросервисов, очередей, баз данных и внешних интеграций, опираться на сухое техническое задание становится сложно. Требования без визуального представления архитектуры теряют наглядность, а команда все чаще упирается в разное понимание контекста задачи.

В подобных ситуациях архитектурные схемы перестают быть инструментом только архитектора и все чаще становятся повседневным инструментом системного аналитика.

Если говорить про проектирование, то многие вспомнят язык моделирования UML (Unified Modeling Language) с его разнообразием диаграмм. В этой статье расскажу еще об одном, менее популярном, но не менее удобном подходе к описанию архитектуры – модели C4. Она позволяет системно и последовательно визуализировать архитектуру на разных уровнях детализации.

Далее рассмотрим, как системный аналитик может использовать C4 в повседневной работе, какие уровни модели наиболее полезны и какую практическую ценность это приносит команде.

Модель C4
Модель C4

Архитектурная модель в системном анализе

В последние годы наблюдается устойчивая тенденция перехода от монолитных архитектур к микросервисным. Это касается процессов не только крупнейших технологических компаний, но и более мелких.

В таких условиях особенно важно иметь единую, понятную и масштабируемую модель архитектуры, которая позволит:

  1. Рассматривать систему с разных уровней: от общего контекста взаимодействия с пользователями и внешними системами до детального разбора внутренних компонентов.

  2. Наглядно отображать сложные интеграции, так как в микросервисных архитектурах число взаимодействий между сервисами растет быстро и без визуализации легко запутаться в реализованных зависимостях.

Системному аналитику необходимо не только понимать бизнес-логику, но и хорошо ориентироваться в архитектурной структуре системы. Это поможет корректно формировать требования и оценивать влияние изменений.

Что такое C4?

C4 – это модель описания архитектуры программных систем, предложенная Саймоном Брауном. Основная идея заключается в том, чтобы описывать систему на нескольких уровнях детализации, каждый из которых отвечает на свой набор вопросов.

Модель включает четыре уровня:

  1. Context – общий контекст системы, пользователи и внешние системы

  2. Container – основные контейнеры: сервисы, базы данных, очереди, приложения

  3. Component – компоненты внутри сервисов

  4. Code – уровень реализации, который обычно находится вне зоны ответственности аналитика

Для системного аналитика особенно полезны первые 2-3 уровня, так как именно они помогают связать бизнес-логику, требования и техническую реализацию. В данной статье уделим больше внимания именно им.

Уровни 3-4 наиболее актуальны разработчикам, но для общего контекста полезны всем участникам команды.

Поговорим детальнее о каждом уровне диаграммы C4, из каких элементов она строится.

В моделях C4, как и в других нотациях, есть своя «азбука», способствующая унификации подхода. При построении C4-диаграмм используется ограниченный и достаточно простой набор элементов, что позволяет не перегружать схемы и обеспечивать читаемость.

Базовые элементы C4:

  • Person – пользователь или роль, взаимодействующая с системой

  • System – программная система или продукт

  • Container – исполняемая единица: сервис, приложение, база данных, очередь

  • Component – логическая часть внутри контейнера

  • Relationship – связи, то есть взаимодействие между элементами

Разный набор элементов используется на разных уровнях. В качестве примера рассмотрим систему, реализующую интернет-магазин с микросервисной архитектурой, включающей: веб-приложение, сервис заказов, сервис платежей, складскую систему и несколько внешних интеграций. Рассмотрим, как можно отобразить архитектуру данной системы на каждом уровне C4.

Context-диаграмма – 1 уровень модели C4

Context-диаграмма (диаграмма контекста) описывает систему на самом верхнем уровне: кто является пользователем, какие внешние системы участвуют во взаимодействии и где проходят границы зон ответственности.

На практике именно на этом уровне часто выявляются неочевидные зависимости: интеграции, о которых команда знает, но нигде не фиксирует, или внешние системы, критичные для бизнес-процессов.

Наличие актуальной context-диаграммы позволяет значительно сократить количество уточняющих встреч и быстрее вводить новых участников в проект.

Для системного аналитика этот уровень особенно важен на старте проекта, когда требуется верхнеуровнево спроектировать задачу, реализовать новые интеграции или задокументировать глобальные зависимости между командами и проектами.

Попробуем реализовать context-диаграмму для нашего кейса. На этом уровне нас интересует не внутренняя реализация системы, а ее место в ИТ-ландшафте компании: кто является пользователем, с какими внешними системами происходит взаимодействие и где проходят границы зон ответственности.

В context-диаграмме мы отображаем:

  • Пользователей:

    • Покупатель – роль клиента в данной системе

    • Оператор интернет-магазина – роль сотрудника в данной системе

  • Основную систему – Best Online Shop – онлайн-платформа для покупки товаров

  • Внешние системы:

    • Платежный провайдер – отвечает за обработку онлайн-платежей

    • Служба доставки – отвечает за организацию доставки заказов

    • ERP-система – корпоративная система управления ресурсами компании

Также отобразим на схеме связи систем и пользователей для наглядности.

Context-диаграмма
Context-диаграмма

На диаграмме видно, что интернет-магазин взаимодействует с несколькими внешними системами: платежным провайдером, службой доставки и ERP-системой. На этом уровне удобно выявлять критические интеграции, от которых напрямую зависит работоспособность бизнес-процессов.

На практике именно эта диаграмма помогает договориться участникам проекта о зонах ответственности и избежать формулировок вроде «это где-то в другой системе».

Container-диаграмма – 2 уровень модели C4

Container-диаграмма (диаграмма контейнеров) – основной инструмент при работе с микросервисной архитектурой. На этом уровне отображаются ключевые сервисы, базы данных, очереди и способы их взаимодействия.

Зачастую именно container-диаграмма помогает понять, что за кажущейся простой бизнес-логикой может стоять цепочка из нескольких сервисов, очередей и внешних вызовов.

Этот уровень позволяет:

  • Корректно оценивать влияние изменений

  • Выявлять скрытые зависимости

  • Заранее учитывать нефункциональные требования: отказоустойчивость, производительность, масштабируемость

На данном этапе аналитик связывает бизнес-требования с конкретными сервисами, выявляет затрагиваемые компоненты при изменениях, прорабатывает интеграционные сценарии.

Данный уровень модели C4 отлично подходит для создания общего контекста с конкретной командой разработки внутри одного проекта, так как уровень детализации понятен всем участникам команды: от аналитика до тестировщика.

В рамках нашего кейса мы декомпозируем систему Best Online Shop – онлайн-платформу для покупки товаров – и рассмотрим ее на уровне container-диаграммы.

На этом уровне система рассматривается как набор взаимодействующих контейнеров: сервисов, баз данных, брокеров сообщений и пользовательских приложений. Container-диаграмма позволяет связать бизнес-требования с конкретными техническими компонентами и понять, как изменения одного сервиса влияют на другой.

Рассмотрим container-уровень на примере архитектуры интернет-магазина:

Container-диаграмма
Container-диаграмма

Из схемы видно, что система состоит из набора специализированных сервисов заказов, платежей, склада, а также инфраструктурных компонентов – API Gateway и брокера сообщений. Асинхронное взаимодействие через Kafka позволяет ослабить связанность сервисов, повысить отказоустойчивость и масштабируемость системы.

Для аналитика container-диаграмма является отличным инструментом при анализе влияния изменений: по ней легко определить, какие сервисы будут затронуты новой функциональностью, какие интеграционные контракты потребуют доработки и где могут возникнуть риски производительности или отказоустойчивости.

Component-диаграмма – 3 уровень модели C4

Component-диаграмма (диаграмма компонентов) используется реже, но становится особенно полезным при работе со сложной бизнес-логикой или критичными участками системы.

Component-диаграммы хорошо работают при:

  • Рефакторинге легаси-кода

  • Внедрении новых сложных бизнес-механик

  • Анализе причин дефектов и архитектурных ограничений

Для подготовки данного уровня модели C4 аналитик работает совместно с разработчиком. В результате они могут разложить сложные сценарии на логические компоненты, зафиксировать зоны ответственности внутри сервиса, выявить потенциальные узкие места, посмотрев на задачу глубже с разных сторон.

Важно не перегружать component-уровень и использовать его только там, где это действительно оправдано сложностью задачи.

Попробуем декомпозировать контейнер Order Service, отвечающий за обработку платежей на примере component-диаграммы для данного сервиса.

Component-диаграмма
Component-диаграмма

На этом уровне сервис рассматривается как набор логических компонентов, каждый из которых отвечает за свою часть функциональности.

На диаграмме показано, как внутри сервиса заказов распределена ответственность между компонентами: обработка входящих запросов, оркестрация бизнес-логики, расчёт стоимости, резервирование товара и взаимодействие с платёжным сервисом.

Code-диаграмма – 4 уровень модели C4

Code-уровень (диаграмма кода) – самый детальный уровень модели C4, описывающий внутреннюю структуру реализации: классы, модули, пакеты, зависимости на уровне исходного кода.

Как правило, этот уровень находится за пределами зоны ответственности системного аналитика и используется в основном разработчиками и архитекторами при проектировании и рефакторинге кода.

Тем не менее, понимание принципов сode-уровня полезно аналитику прежде всего для осознания границ собственной зоны ответственности и возможности влияния на архитектуру.

На практике участие аналитика на этом уровне проявляется в следующих сценариях:

  1. Разбор сложных дефектов, когда причина ошибки кроется не в логике требований, а во внутренней реализации.

  2. Проработка критически важных бизнес-механик, где важно понимать ограничения текущей реализации.

  3. Анализ легаси-кода, когда архитектурные проблемы напрямую влияют на бизнес-функциональность.

В таких случаях аналитик выступает связующим звеном между бизнесом и разработкой, помогая сопоставить бизнес-логику с технической реализацией и выявить системные ограничения.

Важно отметить, что попытка детально описывать кодовую архитектуру со стороны аналитика часто приводит к избыточной детализации и дублированию документации разработчиков. Поэтому code-уровень следует рассматривать как справочный и использовать точечно: там, где без понимания внутренней реализации невозможно принять верные решения.

Практическое применение

После рассмотрения всех уровней C4 может возникнуть ощущение, что что-то подобное уже использовалось. И правда, между C4 и классическими нотациями бизнес-моделирования, такими как IDEF0, есть концептуальное сходство.

Обе методологии используют принцип иерархической декомпозиции, позволяя последовательно переходить от общего уровня абстракции к детальному. Однако фокус у них различается: IDEF0 описывает функциональную сторону системы и отвечает на вопрос – что именно система делает, тогда как C4 концентрируется на архитектурной структуре и отвечает на вопрос – из каких компонентов система состоит и как организовано взаимодействие.

Касаемо практических сценариев применения, можно выделить несколько процессов, в которых C4 особенно актуальна.

В первую очередь при проектировании новых интеграций C4 помогает наглядно показать, какие сервисы участвуют во взаимодействии, выявить потенциальные точки отказа, а главное согласовать формат взаимодействия между командами и создать общий межкомандный контекст.

Также в процессе онбординга новых аналитиков и разработчиков C4-схемы позволяют им быстро погрузиться в архитектуру системы и её ключевые потоки без изучения сотен страниц документации. А если документации нет, то C4 часто используется как способ «пересобрать» понимание системы и зафиксировать текущее состояние архитектуры, борясь тем самым с устаревшим кодом.

Подводя итог, можно сказать, что в условиях микросервисной архитектуры и растущей сложности систем C4-модель становится не просто архитектурной нотацией, но и полноценным рабочим инструментом системного аналитика, и не только.

C4 позволяет формировать целостное понимание системы, связывать требования с технической реализацией, улучшать коммуникацию между аналитикой, разработкой и архитектурой, снижать количество ошибок и недопонимания. Помогает команде мыслить не отдельными требованиями, а системно, что становится критически важным в современных распределенных проектах.

Расскажите, пробовали ли вы C4 в своей работе? Какие уровни модели используете чаще всего и для каких целей? Или, может, у вас есть свой подход к визуализации архитектуры, который работает лучше?

Делитесь опытом в комментариях – обсудим вместе, как визуализировать архитектуру в эпоху микросервисов.