Проектирование — о разделе
Длинные листинги (от ~15 строк) вынесены в каталог code.spirzen.ru и подгружаются в статьях через ExternalCodeEmbed. Короткие фрагменты и диаграммы mermaid остаются в markdown; интерактив — в play.spirzen.ru.
Продолжение Проектирование и архитектура — как спроектировать систему — NFR, API, данные, распределёнка, надёжность. Паттерны GoF — в соседней папке.
Чистая архитектура: теория (2132) → практика ASP.NET Core (2143) → MediatR.
Модель и масштаб — Основы БД, опорные темы, проектирование БД, пакетная работа. Карта — 7.06.
Термины подраздела
| Термин | Коротко |
|---|---|
| DDD | Domain-Driven Design — bounded context, агрегаты |
| Contract-first | OpenAPI/AsyncAPI до кода |
| PACELC | При живой сети: latency vs consistency (Проектирование распределенных систем) |
| Outbox | Событие и запись в БД — одна транзакция (Saga) |
| Circuit Breaker | Предохранитель на вызов зависимости (Инженерия устойчивости) |
| Ошибка / исключение | Фатальный сбой среды vs ожидаемое отклонение в коде — Ошибки, исключения и отказоустойчивость |
Стадии проектной документации (ГОСТ 2.103)
В российской практике конструкторская документация на ПО часто ведётся по ГОСТ 2.103 (стадии разработки), в дополнение к ГОСТ 34 для автоматизированных систем (Дополнительные виды проектной документации):
| Стадия | Содержание (упрощённо) |
|---|---|
| Техническое задание | Требования к системе (в 2.103 не всегда как стадия КД, но связывается с ТЗ по 34) |
| Техническое предложение | Варианты решения, обоснование выбора |
| Эскизный проект | Принципиальная структура, основные решения |
| Технический проект | Детальная архитектура, интерфейсы, данные |
| Рабочий проект | Документация для реализации и сопровождения |
На западных проектах роли те же по смыслу, но названия другие — Software Architecture Document, Software Design Document, OpenAPI-спецификации. См. виды документации.
Базовая теория (глава 4)
Проектные паттерны из этого подраздела должны стыковаться с кодом:
| Вопрос при проектировании | Теория |
|---|---|
| SOLID, слои, DIP | SOLID · парадигмы |
| Агрегаты, наследование vs композиция | ООП — о разделе |
| Исключения в handler vs Circuit Breaker | Ошибки и отказоустойчивость |
| DI, версии пакетов | Зависимости — о разделе |
| Слой persistence, lazy load | ORM — о разделе |
| Асинхронные handler, outbox worker | Асинхронность — о разделе |
Рекомендуемый порядок
Мышление и качество
- Проектирование программных систем · лестница проектирования · принципы
- NFR · документация · сервисы и методы
Данные, API, масштаб
-
Ошибки и исключения (теория) · БД · API и интеграции (три сквозных примера и маршрут) · пакетная работа с данными (batch/bulk/chunk при ETL и массовых загрузках) · теория очередей и брокеров · OAuth и webhooks · mTLS, JWS, AsyncAPI, outbox · Ричардсон · идемпотентность
Теория до Проектирование баз данных: Основы БД · опорные темы · нормализация.
Практика выбранной СУБД из кода — SQLite, PostgreSQL, MySQL, Microsoft SQL Server.
-
OpenAPI · REST в инфраструктуре · ввод по API · 8 принципов RESTful API
-
System Design — карта тем · 12 концепций распределённой архитектуры · масштабирование / Горизонтальное масштабирование · надёжность · инженерия устойчивости · SLA — договор · SLA — "девятки" · распределённые системы
Стили и эволюция
- Модульный монолит · события · CQRS · Event Sourcing · Saga · Strangler · паттерны перехода с монолита
- Микросервисные паттерны (девять компонентов продакшн-стека) · веб · GRASP и ADR
Практика архитектора
Системы с LLM и RAG
Корпоративный чат, copilot и поиск по базе знаний — те же инженерные задачи, что и у распределённого сервиса — контракт API, NFR, данные, отказоустойчивость. Удобный вертикальный каркас — Семь слоёв LLM-стека (источники → предобработка → модель → оркестрация → инференс → интеграция → приложение). Горизонтальные приёмы из этого подраздела к нему стыкуются так:
| Задача проектирования | Глава здесь | Слой LLM-стека |
|---|---|---|
| Latency, SLA, деградация | NFR, SLA | 5 — инференс |
| REST, OAuth, webhooks | API и интеграции | 6 — интеграция |
| Векторный индекс, схема метаданных | БД, векторные БД | 2 — данные |
| Gateway, rate limit, очереди | 12 концепций, брокеры | 5–6 |
| Ошибки в коде vs устойчивость сервиса | Ошибки, исключения и отказоустойчивость, Инженерия устойчивости | 5–6 |
| Угрозы и PII | threat modeling, защита данных | 2, 5 |
Реализация и промпты — Разработка ИИ.
Все материалы
Проектирование программных систем
Фундаментальные принципы проектирования программных систем с учётом требований к развёртыванию, механизмов обработки ошибок, стратегий интеграции, обеспечения безопасности и планов долгосрочной поддержки инфраструктуры.
Подходы к проектированию
Классификация стратегий проектирования программного обеспечения с определением точек входа в разработку, последовательности формирования компонентов и методов обеспечения согласованности архитектуры.
Принципы проектирования
Систематизация инженерных принципов проектирования программного обеспечения с разбором SOLID, DRY, KISS, YAGNI, закона Конвея и принципа разделения ответственности, а также примерами выявления нарушений.
Проектирование сервисов и методов
Методология проектирования сервисных слоёв и методов взаимодействия с чётким разделением ответственности между микросервисной инфраструктурой и доменными сервисами в рамках DDD-подхода.
Проектирование функциональных UI
Архитектурные паттерны проектирования пользовательских интерфейсов с моделированием пользовательских действий как запросов на изменение состояния системы и обеспечением детерминированной обработки событий.
Проектирование под нефункциональные требования
Как формулировать измеримые NFR и переводить их в архитектурные решения: масштабирование, отказоустойчивость, безопасность, observability.
Документация как инструмент проектирования
Традиционный подход: 1. Команда проектирует систему, 2. Пишет код, 3. По завершении — создаёт документацию для сдачи заказчику или архивирования.
Проектирование баз данных
Методология проектирования реляционных и нереляционных хранилищ данных с обеспечением структурной целостности, оптимизации производительности запросов, масштабируемости и долгосрочной расширяемости схем.
Проектирование API и интеграций
Архитектурные принципы проектирования программных интерфейсов и интеграционных контуров с обеспечением надёжности обмена данными, стандартизации контрактов и минимизации взаимного влияния сервисов.
Публичный API, OAuth 2.0 и webhooks
Проектирование публичных программных интерфейсов с интеграцией протоколов OAuth 2.0, настройкой областей доступа, реализацией веб-хуков с криптографической подписью и обеспечением идемпотентности запросов.
mTLS, JWS-подпись webhooks и AsyncAPI с outbox
Архитектура защищённых B2B-интеграций с применением двустороннего TLS, криптографической подписи событий через JWS, описания контрактов в AsyncAPI и гарантированной доставки сообщений через паттерн outbox.
Паттерны микросервисной архитектуры
Каталог архитектурных паттернов микросервисных систем с разбором декомпозиции доменов, маршрутизации через API Gateway, изоляции баз данных, реализации саг, обеспечения наблюдаемости и предупреждения типичных антипаттернов.
Проектирование веб-разработки
Методология проектирования веб-ориентированных приложений с учётом требований к масштабируемости, безопасности, производительности рендеринга и согласованности клиент-серверного взаимодействия.
Проектирование распределенных систем
Фундаментальные принципы проектирования распределённых вычислительных систем с анализом методов сетевого взаимодействия, обеспечения консистентности данных и координации работы независимых узлов.
Хранилища DWH и ETL-процессы
Архитектура корпоративных хранилищ данных и проектирование ETL-процессов для консолидации, трансформации и загрузки информационных массивов в аналитические контуры предприятий.
Лестница проектирования систем
Концептуальная модель поэтапного проектирования программных систем с постепенным повышением уровня архитектурной зрелости, углублением понимания доменных процессов и накоплением инженерного опыта.
Вертикальное масштабирование
Вертикальное масштабирование — это подход к увеличению вычислительной мощности информационной системы за счёт улучшения характеристик одного физического или виртуального узла.
Горизонтальное масштабирование
Горизонтальное масштабирование — это стратегия расширения вычислительных ресурсов системы за счёт добавления дополнительных узлов, таких как физические серверы, виртуальные машины или контейнеры.
Горизонтальное дублирование
Горизонтальное дублирование — это повторение одинаковых или схожих фрагментов кода в пределах одного уровня абстракции, чаще всего внутри одного модуля, класса или набора функций, решающих близкие по.
Competing Consumer Pattern
Архитектурный паттерн конкурентного потребления сообщений с распределением нагрузки между независимыми обработчиками, обеспечением балансировки очередей и повышением пропускной способности распределённых систем.
Read Replicas
Архитектура реплик чтения для распределения нагрузки запросов на выборку данных, обеспечения горизонтального масштабирования баз данных и снижения задержек при доступе к актуальным состояниям хранилищ.
Shared Nothing Architecture
Архитектурный подход к построению распределённых вычислительных систем с полной изоляцией ресурсов узлов, обеспечением автономной обработки данных и минимизацией межузловых зависимостей.
Shared Storage Architecture
Архитектура распределённого хранения данных с обеспечением одновременного доступа вычислительных узлов к единому пулу хранилищ, координацией транзакций и поддержанием консистентности реплик.
Single Node architecture
Архитектурная модель одноконтурных программных систем с концентрацией бизнес-логики, вычислительных задач, механизмов хранения данных и обработки запросов в пределах единого вычислительного узла.
Уровни развития API и модель Ричардсона
Эволюционная модель зрелости программных интерфейсов по Ричардсону с поэтапным переходом от базовой HTTP-связи к ресурсно-ориентированной архитектуре, гипермедиа-управлению и полной REST-совместимости.
Модельная архитектура микросервисов
Архитектурная модель микросервисных систем с разбиением монолитных приложений на автономные сервисы, обеспечением независимого развёртывания, изоляции доменов и стандартизации межсервисного взаимодействия.
Стратегии совместного использования кода в микросервисах
Методологии управления общим кодом в микросервисной архитектуре с предотвращением дублирования, построением библиотечных пакетов, выделением общих сервисов и обеспечением обратной совместимости интерфейсов.
CQRS
Архитектурный паттерн разделения ответственности запросов и команд с построением независимых каналов чтения и записи, оптимизацией моделей данных и обеспечением масштабируемости операций выборки.
Event Sourcing
Архитектурный паттерн сохранения состояния системы через последовательность доменных событий с обеспечением аудита изменений, восстановления состояния и поддержки сложных бизнес-транзакций.
Saga
Архитектурный паттерн управления распределёнными транзакциями с координацией локальных операций, реализацией компенсирующих действий и обеспечением eventual consistency в микросервисных контурах.
Strangler Fig
Архитектурный паттерн постепенной миграции монолитных систем к микросервисной архитектуре с поэтапным замещением функциональных блоков, маршрутизацией трафика и обеспечением обратной совместимости.
Модульный монолит
Архитектурный подход к построению модульных монолитных систем с обеспечением внутренней изоляции компонентов, чёткого разделения ответственности, стандартизации интерфейсов и постепенной подготовки к микросервисной декомпозиции.
Событийно-ориентированная архитектура
Архитектурный подход к проектированию систем с асинхронным взаимодействием компонентов через обмен событиями, обеспечением слабой связанности, масштабируемости обработки и поддержки реактивных сценариев.
Сервисно-ориентированная архитектура
Архитектурный подход к построению программных систем на основе набора слабосвязанных, автономных сервисов с обеспечением стандартизации интерфейсов, повторного использования функционала и независимого жизненного цикла.
Пространственная архитектура
Архитектурный подход к проектированию высоконагруженных распределённых систем с обеспечением пространственной изоляции компонентов, горизонтального масштабирования, отказоустойчивости и минимизации синхронных блокировок.
Методы и ключ идемпотентности
Идемпотентность — одно из фундаментальных свойств в проектировании программных систем, особенно в распределённых средах, сетевых протоколах и архитектуре приложений.
Архитектура конвейера
Архитектурный паттерн конвейерной обработки данных с последовательным прохождением информации через специализированные этапы трансформации, обеспечения параллелизма, оптимизации пропускной способности и контроля состояния.
Одноранговая архитектура
Архитектурная модель одноранговых сетей с обеспечением равноправного взаимодействия узлов, распределённой маршрутизации, децентрализованного хранения данных и повышения отказоустойчивости сетевой инфраструктуры.
Чистая архитектура
Архитектурный подход к проектированию программного обеспечения с обеспечением максимальной независимости от фреймворков, баз данных и внешних сервисов, построением концентрических слоёв и чёткого разделения ответственности.
Многоуровневая архитектура
Архитектурный подход к проектированию программных систем с разделением функциональности на изолированные логические уровни, обеспечением слабой связанности, стандартизации интерфейсов и независимого масштабирования слоёв.
Надежность и доступность
Методологии обеспечения надёжности и доступности программных систем с проектированием отказоустойчивых контуров, мониторинга состояния, автоматического восстановления и расчёта целевых показателей SLA.
Уровни SLA и реальное время простоя
Анализ уровней соглашений об уровне обслуживания с расчётом допустимого времени простоя, определением метрик доступности, проектированием резервных контуров и обеспечением соответствия бизнес-требованиям.
Инженерия устойчивости
Методологии проектирования устойчивых распределённых систем с применением паттернов circuit breaker, стратегий повторных запросов с экспоненциальной задержкой, настройки таймаутов и проведения хаос-тестирования.
Масштабирование чтения и записи в веб-приложении
Архитектурные стратегии масштабирования операций чтения и записи в веб-приложениях с применением кэширования, репликации баз данных, шардирования и асинхронной обработки очередей сообщений.
Стратегии работы с базами данных при разных нагрузках
Классификация стратегий взаимодействия с реляционными и нереляционными хранилищами данных в зависимости от профиля нагрузки, обеспечение оптимизации запросов, настройки пулов соединений и балансировки транзакций.
GRASP и паттерн ADR для веб-бэкенда
Применение принципов GRASP для распределения ответственности в веб-бэкенде с интеграцией паттерна Action–Domain–Responder для обеспечения чёткого разделения слоёв обработки HTTP-запросов.
Event Storming — совместное проектирование домена
Методология совместного проектирования доменной модели через Event Storming с проведением многоуровневых воркшопов, формированием архитектурных артефактов и установлением связей между ограниченными контекстами и бэклогом разработки.
Оценка архитектурных альтернатив
Методология оценки архитектурных альтернатив с проведением trade-off анализа по нефункциональным требованиям, документированием решений в ADR и формированием объективных критериев выбора для команды разработки.
Threat modeling для архитекторов
Методология моделирования угроз на архитектурном уровне с применением упрощённой STRIDE-классификации, определения границ доверия в C4-диаграммах и формирования проверочных чек-листов перед релизом.
Clean Architecture на ASP.NET Core
Практический разбор эталонной реализации чистой архитектуры на ASP.NET Core с разделением на четыре проекта, применением вертикальных срезов, интеграцией MediatR и Aspire, а также анализом типичных ошибок проектирования.
Паттерны перехода от монолита к микросервисам
Каталог паттернов поэтапной миграции монолитных систем к микросервисной архитектуре с применением Strangler Fig, параллельного запуска, декорирования взаимодействий и захвата изменений данных через CDC.
Проектирование — о разделе
Навигационный маршрут по разделу системного проектирования программного обеспечения с последовательным изучением нефункциональных требований, архитектуры API, баз данных, распределённых систем и методов оценки альтернатив.
В подборках
Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:
Техлид — Паттерны проектирования — о разделе, Архитектура выполнения — о разделе, Роль и практика архитектора программного обеспечения, Микросервисы и интеграция — о разделе, Проектирование и архитектура — о разделе, Культура кода — о разделе.
Архитектура и проектирование ПО — Паттерны проектирования — о разделе, Методы защиты пользовательских и корпоративных данных, Проектирование и архитектура — о разделе, Микросервисы и интеграция — о разделе, Архитектура десктопных приложений, Контейнеризация и оркестрация — о разделе.