О разделе
Длинные листинги (от ~15 строк) вынесены в каталог code.spirzen.ru и подгружаются в статьях через ExternalCodeEmbed — так HTML энциклопедии не раздувается, а код остаётся с подсветкой, вкладками и сериями "шаг 1…N". Короткие фрагменты (одна строка, пара выражений) по-прежнему прямо в markdown. Диаграммы mermaid и интерактив — на месте или в play.spirzen.ru.
Здесь собрано проектирование и архитектура программных систем — структурные решения, которые потом дорого менять — границы модулей, масштабирование, легаси, объяснение выбора команде и бизнесу.
Материалы для разработчиков, архитекторов и аналитиков. Много статей с интерактивными схемами (C4, UML, эскизы монолита и микросервисов).
Уровень развёртывания (bare metal, ВМ, контейнеры, облако) — четыре модели; оркестрация — 8.06.
Как закодировать и собрать решения — в Конструирование ПО (связность/сцепление, модели ЖЦ, планирование).
Архитектору и разработчику нужен живой опыт с PostgreSQL — транзакции, индексы, репликация, JSONB, миграции схем.
Установите сервер локально и пройдите практику по PostgreSQL; для production — практикум 8.11.
System Design с БД — карта тем.
Базовая теория (глава 2)
Проектные паттерны опираются на сети и протоколы — при пробелах идите в 2. Система и сеть:
| Вопрос при проектировании | Теория |
|---|---|
| REST, HTTP, контракты, идемпотентность | 2.09 · design/117 |
| Очереди, Saga, согласованность | Брокеры |
| DNS, TLS, CDN, балансировка | 2.03 · 12 концепций |
| OAuth, mTLS, ИБ в NFR | 2.08 |
| Диагностика API в консоли | curl |
Базовая теория (глава 3)
| Вопрос при проектировании | Теория |
|---|---|
| Модель данных, нормализация, индексы | Основы БД · проектирование БД |
| Транзакции, MVCC, изоляция | Конкурентный доступ |
| Репликация, шардинг, кэш у БД | Опорные темы · управление РСУБД |
| NoSQL, полиглот, event sourcing | NoSQL · Event Sourcing в NoSQL |
| Batch, bulk, ETL, checkpoint | Пакетная работа с данными |
| JSONB, пагинация в API | JSONB в PostgreSQL · пагинация в SQL |
Базовая теория (глава 4)
Архитектурные решения должны стыковаться с тем, как код реально выполняется:
| Вопрос при проектировании | Теория |
|---|---|
| SOLID, слои, абстракции | SOLID · парадигмы — о разделе |
| ООП, агрегаты, наследование vs композиция | ООП — о разделе |
| Память, потоки, GC, производительность | Архитектура выполнения — о разделе |
| Исключения в коде vs retry на сервисе | Ошибки и отказоустойчивость |
| DI, версии библиотек, модульность | Зависимости — о разделе |
| Слой доступа к данным, N+1 | ORM — о разделе |
| Асинхронные вызовы, event loop | Асинхронность — о разделе |
Не обязательно идти по алфавиту в меню. Ниже — три маршрута
в конце — связи с соседними разделами и подборка "Архитектура и проектирование ПО".
С чего начать (базовый маршрут)
- Основы проектирования и архитектуры — зачем проектировать, четыре уровня архитектуры, схемы, ADR. 1a. Ошибки, исключения и отказоустойчивость — термины (ошибка vs исключение), стек, логи; мост к retry/DLQ в главах ниже.
- System Design — карта тем и подготовка — порядок изучения (сети → БД → кэш → очереди), пять рычагов, типовой контур, классические задачи, postmortem. Синтез по асинхронной обработке — асинхронная обработка в высоконагруженных системах; для "ложного CRUD" — email-рассылка как распределённая система; для ручной диагностики API-контуров — утилита curl, curl / fetch — примеры. 2a. Основы развития информационных систем — мост между архитектурой и эксплуатацией: как системы эволюционируют от MVP к кэшу, балансировке, репликации, шардингу, централизованному логированию и поэтапным миграциям.
- 12 концепций распределённой архитектуры — балансировка, кэш, CDN, очереди, gateway, шардирование и autoscaling в одной шпаргалке. Экосистема технологий MSA (БД, брокеры, K8s, CI/CD) — таблица; сборка в продакшн-контур — девять компонентов.
- Системный подход и системное мышление — границы системы, обратные связи.
- Архитектурные стили и их применение — монолит, SOA, микросервисы.
- Доменная модель · Типы классов в DDD — сущности, агрегаты, роли классов.
- Проектирование под NFR — измеримые нефункциональные требования.
- Итоги · чек-лист.
Маршрут для архитектора
Массовый ИИ-код без архитектурных инвариантов даёт нейрослоп в репозитории — см. вайб-кодинг.
- Роль и практика архитектора ПО — артефакты, навыки, отличие от техлида.
- Практика архитектурного проектирования — монолит, границы, Conway, эволюция.
- Event Storming · Оценка альтернатив · Threat modeling.
- Проектирование — о разделе — API, БД, распределённые системы, надёжность; массовые загрузки и ETL — Пакетная работа с данными.
- Чистая архитектура — теория → практика на ASP.NET Core.
- Документация как инструмент · API и интеграции · микросервисы · декомпозиция монолита · паттерны перехода.
- Семь слоёв LLM-стека — если в ландшафт входят RAG, copilot или вызов внешней модели: от источников данных до прикладного UI (сопоставимо с gateway, очередями и NFR из 12 концепций).
"Срочно нужны микросервисы" — сначала NFR и границы команд
сравните с модульным монолитом и таблицей trade-off.
Термины на одной странице
| Термин | Смысл |
|---|---|
| NFR | Нефункциональные требования в цифрах: latency, RPS, RTO/RPO |
| ADR | Почему выбрали вариант A, а не B |
| Bounded context | Граница однозначных терминов и правил |
| Saga / Outbox | Согласованность между сервисами без одной БД — Saga, теория очередей |
| Circuit Breaker | Предохранитель на вызов зависимости |
CAP/PACELC — распределённые системы, выбор лидера (Raft, Paxos, ZAB) — Алгоритмы выбора лидера в распределённых системах, карта system design — System Design — карта тем и подготовка, итоги — Проектирование и архитектура — итоги.
Углубление — паттерны
- System Design — карта тем · 12 концепций распределённой архитектуры · Асинхронная обработка в высоконагруженных системах · Email-рассылка как распределённая система — подготовка к собеседованию, очереди и воркеры, "ложный CRUD" рассылки, напоминалка перед микросервисами.
- Алгоритмы выбора лидера — Bully, Ring, Paxos, Raft, ZAB и примеры из etcd, ZooKeeper, Kafka, PostgreSQL.
- Паттерны проектирования — GoF, ArchiStyler.
- Стили внутренней организации кода · обзор паттернов.
- Масштабируемость и параллелизм · имитационное моделирование.
- Семь слоёв LLM-стека — архитектурный каркас для продуктов с большими языковыми моделями (данные → инференс → интеграция → приложение).
Практика в лаборатории
Закрепление тем раздела — в кейсах лаборатории "Кейсы":
| Тема | Кейс |
|---|---|
| Анализ ситуации, гипотезы, критерии решения | "Ситуации в IT" |
| Разбор инцидента и профилактика | "Разборы" |
| Слоистый backend (REST, DI, репозиторий) | "Spring Boot приложение" (данные — PostgreSQL, MySQL, SQL Server) |
| Порождающий паттерн Singleton | "Singleton на C#" |
| Клиент внешнего API, обработчики событий | "Telegram Bot на Python" |
| TDD и качество модулей | "Тренируем TDD" (теория — тестирование) |
Полный список ссылок на кейсы по паттернам — в обзоре подраздела "Паттерны".
Все материалы раздела
Проектирование
52 элемента
Паттерны проектирования
35 элементов
Основы проектирования и архитектуры программного обеспечения
Обычно проектирование применяется к каким-то планам, схемам, моделям или расчётам, которые описывают будущий объект, включая характеристики, функции, инженерные решения.
Архитектурные стили и их применение
Архитектурные решения, касающиеся распределения компонентов и организации их взаимодействия, определяют фундаментальные свойства системы: её масштабируемость, отказоустойчивость, сложность.
Стили внутренней организации кода
Это достигается через инверсию зависимостей — принцип, согласно которому высокоуровневые модули не должны зависеть от низкоуровневых; оба должны зависеть от абстракций.
Принципы компонентно-ориентированной архитектуры
Компонентно-ориентированная архитектура - согласованность версий общих модулей и управление зависимостями между сервисами.
Стратегии декомпозиции монолитных систем
Как резать монолит без "большого взрыва": пять вопросов перед стартом, анализ, Strangler, DDD-контексты, данные, саги и метрики успеха.
Влияние инфраструктуры на архитектурные решения
Инфраструктура — это множество решений, инкапсулированных в сервисы, каждое из которых накладывает ограничения и открывает возможности.
Классификация типов классов в объектно-ориентированном проектировании
Классификация типов классов в ООП - семантика имён, роли объектов и разделение ответственности в проекте.
Построение систем на основе классов и объектов
Построение систем на классах и объектах - модель предметной области, границы ответственности и связи между сущностями.
Доменная модель
Доменная модель - как отразить предметную область в ПО, выделить сущности и зафиксировать правила бизнес-логики.
Типы классов в DDD
Тактические строительные блоки Domain-Driven Design: Entity, Value Object, Aggregate Root, доменные сервисы, репозитории, фабрики и события — какие классы в каком слое и чем они отличаются от DTO и контроллеров.
Паттерны проектирования
В практике разработки программного обеспечения естественным образом возникают типовые задачи: как управлять жизненным циклом объекта?
Системный подход и системное мышление
Системный подход в разработке ПО — с примерами проектирования API и базы данных, чек-листом вопросов и типичными ошибками при игнорировании связей между компонентами.
Имитационное моделирование
Имитационное моделирование в IT и системном анализе: дискретно-событийные и агентные модели, очереди, нагрузка, инструменты и отличие от прототипа и численной симуляции.
Роль и практика архитектора программного обеспечения
Кто такой архитектор ПО, чем отличается от техлида, какие артефакты создаёт и какие навыки развивать — с разбором терминов и типичных ситуаций для новичка.
2 концепций архитектуры распределённых систем
Краткая напоминалка для разработчика: балансировка, кэш, CDN, очереди, pub/sub, API Gateway, circuit breaker, service discovery, шардирование, rate limiting, consistent hashing и autoscaling — с маршрутом в углублённые главы.
Алгоритмы выбора лидера в распределённых системах
Bully, Ring, Paxos, Raft и ZAB — как кластер договаривается о единственном координаторе для записи, failover и координации. Сравнение механизмов и примеры из etcd, ZooKeeper, PostgreSQL и Kafka.
System Design — карта тем и подготовка
Шесть столпов system design, порядок изучения от сетей и БД до очередей, пять инженерных рычагов, типовой продакшн-контур и каркас ответа на собеседовании.
Email-рассылка как распределённая система
Почему сервис рассылок перестаёт быть CRUD после продакшена: очереди, state machine, bounces, SPF/DKIM/DMARC, идемпотентность, webhooks ESP и throttling провайдеров.
Асинхронная обработка данных в высоконагруженных системах
Очереди, воркеры, outbox, паттерны с клиентом, семантика доставки, backpressure, идемпотентность, DLQ и метрики. Архитектурный разбор для проектирования и code review.
Масштабируемость и параллелизм в системном проектировании
Параллелизм в таких системах — не просто техническая возможность выполнения нескольких вычислений одновременно, а инструмент достижения *масштабируемости*.
Практика архитектурного проектирования
Практика архитектурного проектирования: монолит и N-tier, границы модулей, Conway, контракты API, эволюция и структура репозитория.
Проектирование и архитектура — итоги
Краткие итоги раздела "Проектирование и архитектура" для разработчика, архитектора и аналитика.
Проектирование и архитектура — чек-лист
Чек-лист раздела «Проектирование и архитектура» — вопросы для самопроверки.
Проектирование и архитектура — о разделе
Как проектировать ПО осознанно: от домена и стилей развёртывания до микросервисов, ADR и документации — маршруты для разработчика, архитектора и аналитика.
В подборках
Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:
Техлид — Специализации, Роль и практика архитектора программного обеспечения, Паттерны проектирования — о разделе, Проектирование — о разделе, Архитектура выполнения — о разделе, Микросервисы и интеграция — о разделе.
Архитектура и проектирование ПО — Архитектура десктопных приложений, Паттерны проектирования — о разделе, Архитектура выполнения — о разделе, Проектирование — о разделе, Основы интеграционного взаимодействия — о разделе, Методы защиты пользовательских и корпоративных данных.