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

Архитектура — это не про рисование квадратиков и стрелок. Это про принятие компромиссных решений, которые дорого обходится откатить. Главный навык архитектора — не технические знания, а умение рассуждать о компромиссах в условиях неопределённости.
Чем на самом деле занимается архитектор?

Расхожий образ архитектора — человека, который спускает схемы с небес и раздаёт указания командам, — давно устарел. Современные архитекторы работают в четырёх взаимопересекающихся измерениях: техническое лидерство, проектирование систем, коммуникация внутри организации и непрерывное обучение. Они определяют атрибуты качества (производительность, масштабируемость, безопасность, сопровождаемость), переводят бизнес-цели в структурные ограничения, наставляют команды разработки и берут на себя ответственность за решения, которые иначе принимались бы несогласованно в разных командах.

Нажмите на карточку, чтобы узнать, на что архитекторы тратят время
Матрица навыков архитектора

Архитектура — одна из немногих ролей, требующих одновременно и предельной глубины, и предельной широты. Старший инженер может быть мировым экспертом в одной области; архитектор должен быть компетентен во многих. Классическая метафора — T-образный набор навыков: глубина хотя бы в одной технической дисциплине, но достаточная широта, чтобы убедительно говорить о других. Марк Ричардс и Нил Форд добавляют второе измерение: анти-паттерн «замороженного пещерного человека» описывает архитекторов, которые перестали расширять кругозор и теперь применяют десятилетние решения к современным задачам.

Сравните профили навыков на разных уровнях
Область навыковСтарший инженерSolution-архитекторEnterprise-архитектор
Техническая глубинаЭксперт в 1–2 областяхЭксперт в одной, компетентен во многихШирокий кругозор, глубина в архитектуре
Проектирование системВ рамках одного сервисаПродукт или ограниченный доменБизнес-подразделения и портфели
Согласование с бизнесомРедкоРегулярноКлючевая ответственность
Коммуникация со стейкхолдерамиТехнические коллегиDev-команды + продакт-менеджерыC-level, совет директоров, вендоры
Технологическая стратегияВлияет на выборы командыОпределяет стек продуктаОпределяет стандарты организации
Полномочия в решенияхЛокальные / тактическиеНа уровне продуктаУровень организации, многолетний горизонт
Типичный горизонтСпринт / фичаКвартал / продуктГод / портфель
Типы архитектур: общая картина

Архитектура — не одна дисциплина, а семейство взаимопересекающихся задач на разных масштабах. Два наиболее часто смешиваемых в индустрии типа — Solution Architecture и System Architecture (она же Software Architecture). Понимание разницы критично: каждый из них работает на своём уровне охвата, отвечает на разные вопросы и производит разные артефакты.

Наведите курсор на кольцо, чтобы увидеть, на каком уровне оно работает
Enterprise-архитектураSolution-архитектураСистемная / программная архитектура
Наведите курсор на кольцо, чтобы увидеть, на каком уровне оно работает
Solution- и System-архитектура: детальный разбор

Эти два типа часто путают, хотя они отвечают на совершенно разные вопросы. Solution-архитектура спрашивает: «Какие системы, сервисы и вендоры мы объединяем, чтобы решить эту бизнес-задачу, и как они соединяются?» Системная архитектура спрашивает: «Как мы структурируем внутреннее устройство конкретной системы, чтобы она соответствовала функциональным и нефункциональным требованиям?» Solution-архитектор рисует карту; системный архитектор проектирует кварталы города.

Когда включается каждый тип

Solution-архитектура включается, когда новая бизнес-инициатива требует объединить несколько систем — существующих и новых. Например: компания хочет запустить функцию мобильных платежей. Solution-архитектор выстраивает поток: мобильное приложение → API Gateway → Payment Service (новый) → существующая CRM → сторонний платёжный процессор → сервис уведомлений. Он выбирает паттерны интеграции (REST, gRPC и очереди сообщений), определяет владельцев данных, оценивает риск привязки к одному вендору (vendor lock-in), составляет смету расходов и представляет архитектуру стейкхолдерам. Как именно построен Payment Service внутри — не его задача. Системная архитектура включается, когда область применения уже ограничена. Команда, строящая Payment Service, должна решить: какие слои у него есть, как он тестируется, какова схема базы данных, как он обрабатывает сбои, каковы его SLO. Системный архитектор (нередко им выступает техлид, Tech Lead) принимает эти решения в тесном взаимодействии с командой разработки. В небольших компаниях роли часто совмещаются — один человек может делать и то, и другое, — но различие в образе мышления остаётся справедливым независимо от должностей.
Триггер — бизнес-инициатива
Интеграция нескольких систем
Решения по вендорам и стоимости
Внутренняя структура одной системы
SLO и обработка сбоев
Взаимодействие с техлидом (Tech Lead)
Другие типы архитектур, с которыми вы столкнётесь
Нажмите на карточку, чтобы понять область применения и артефакты каждого типа
Архитектурные проверки пригодности (fitness functions)

Нил Форд, Ребекка Парсонс и Патрик Куа ввели концепцию «эволюционной архитектуры» — архитектуры, которая направляет изменения, а не противится им. В её основе лежит функция пригодности (fitness function): объективная функция, измеряющая, насколько текущая архитектура соответствует конкретной архитектурной характеристике. Такие функции могут быть автоматизированными тестами (проверка нежелательных зависимостей, верификация SLO времени отклика), ручными процессами (аудиты безопасности) или метрическими дашбордами. Ключевой вывод: архитектура — это не единоразовое проектирование, а непрерывное свойство системы, которое необходимо активно поддерживать и измерять.

Нажмите на подсвеченные строки, чтобы понять, как проверки пригодности (fitness functions) реализуются на практике
java
1
// ── Фитнес-функция зависимости через ArchUnit
2
@ArchTest
3
static final ArchRule NO_DOMAIN_DEPENDS_ON_INFRA =
4
  noClasses().that().resideInAPackage("..domain..")
5
    .should().dependOnClassesThat()
6
    .resideInAPackage("..infrastructure..");
7
8
// ── Фитнес-функция производительности (JMeter/Gatling) ───────
9
// утверждать задержку p99 <200 мс для /api/checkout
10
// утверждать частоту ошибок < 0,1% при 500 одновременных пользователях
11
12
// ── Фитнес-функция безопасности ─────────────────────────────────
13
// Проверка зависимостей OWASP: отсутствие ВЫСОКИХ CVE в производственных подразделениях
Распространённые заблуждения о роли архитектора
Нажмите на карточку — это реальные анти-паттерны из реальных команд
От разработчика к архитектору: переход

Большинство архитекторов приходят из разработки — и переход сложнее, чем кажется. Навыки, сделавшие вас отличным разработчиком (глубокая техническая фокусировка, решение конкретных задач, поставка работающего кода), необходимы, но недостаточны для архитектуры. Переход требует развития новых «мышц»: системного мышления (как это решение повлияет на систему через десять шагов?), работы со стейкхолдерами (как согласовать людей с конкурирующими интересами?) и комфорта с неопределённостью (как принять правильное решение, не имея всей нужной информации?).

Сдвиг мышления: разработчик → архитектор

Главный сдвиг — от «как мне это построить?» к «какие компромиссы нам стоит принять?». Разработчик оптимизирует в рамках ограничений; архитектор определяет сами ограничения. Разработчик добивается успеха, поставляя рабочие фичи; архитектор — обеспечивая, что система сможет продолжать поставлять фичи ещё через несколько лет. Конкретно: разработчик, обнаружив проблему с производительностью, тянется за более быстрым алгоритмом или кэшированием. Архитектор спрашивает, не является ли проблема производительности симптомом архитектурного несоответствия — возможно, данные идут не через тот сервис, или была выбрана не та технология хранения. Разработчик мыслит на уровне метода; архитектор — на уровне границ системы. Ни один из взглядов не является полным без другого, поэтому лучшие архитекторы никогда полностью не перестают думать как разработчики.
Системное мышление
Согласование стейкхолдеров
Комфорт с неопределённостью
Рассуждение о компромиссах
Определение ограничений
Мышление на длинный горизонт
Главный вывод: основной продукт архитектора — не диаграмма, а набор хорошо обоснованных, явно задокументированных решений, позволяющих системе эволюционировать со временем. Роль требует технической глубины, широты кругозора, коммуникативных навыков и организационного мужества. Solution-архитектура и системная архитектура — разные, но взаимодополняющие дисциплины, каждая из которых работает на своём уровне охвата и отвечает на разные вопросы.
Что дальше: теперь, когда мы понимаем, кто принимает архитектурные решения и на каком уровне, следующие уроки посвящены принципам, которыми руководствуются эти решения — начиная с SOLID, фундаментального набора принципов объектно-ориентированного проектирования, лежащего в основе большинства архитектурных паттернов.