Проектирование — о разделе
Длинные листинги (от ~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, закон Конвея и SOC — критерии оценки решений с примерами нарушений и чек-листами для поддерживаемого кода.
Проектирование сервисов и методов
Проектирование сервисов - от микросервисов до доменных сервисов в DDD и как не путать уровни ответственности.
Проектирование функциональных UI
Любое действие пользователя — это запрос на изменение состояния, а не прямая команда.
Проектирование под нефункциональные требования
Как формулировать измеримые NFR и переводить их в архитектурные решения: масштабирование, отказоустойчивость, безопасность, observability.
Документация как инструмент проектирования
Традиционный подход: 1. Команда проектирует систему, 2. Пишет код, 3. По завершении — создаёт документацию для сдачи заказчику или архивирования.
Проектирование баз данных
Проектирование баз данных — это системная инженерная дисциплина, направленная на создание структуры хранения данных, которая обеспечивает корректность, целостность, производительность, расширяемость.
Проектирование API и интеграций
Современные программные системы редко существуют изолированно.
Публичный API, OAuth 2.0 и webhooks
Второй сквозной пример — публичный REST API с OAuth 2.0 (PKCE и client credentials), scopes и входящие webhooks с подписью, идемпотентностью и политикой повторов.
mTLS, JWS-подпись webhooks и AsyncAPI с outbox
Третий сквозной пример — доверенный B2B-контур (mTLS), подпись webhooks через JWS, контракт событий в AsyncAPI и надёжная публикация через transactional outbox.
Паттерны микросервисной архитектуры
Экосистема технологий MSA, карта продакшн-стека, декомпозиция, API Gateway, database per service, Saga, observability и антипаттерны — практика микросервисов.
Проектирование веб-разработки
Переходите к изучению этой статьи только после того, как изучите микросервисы.
Проектирование распределенных систем
Распределённые системы представляют собой совокупность независимых вычислительных узлов, которые взаимодействуют между собой через сеть для достижения общей цели.
Хранилища DWH и ETL-процессы
Современные организации ежедневно генерируют огромные объёмы информации.
Лестница проектирования систем
Мы рассмотрим проектирование как лестничную концепцию, где каждая ступень этой лестницы представляет собой уровень зрелости, глубины понимания и практического опыта.
Вертикальное масштабирование
Вертикальное масштабирование — это подход к увеличению вычислительной мощности информационной системы за счёт улучшения характеристик одного физического или виртуального узла.
Горизонтальное масштабирование
Горизонтальное масштабирование — это стратегия расширения вычислительных ресурсов системы за счёт добавления дополнительных узлов, таких как физические серверы, виртуальные машины или контейнеры.
Горизонтальное дублирование
Горизонтальное дублирование — это повторение одинаковых или схожих фрагментов кода в пределах одного уровня абстракции, чаще всего внутри одного модуля, класса или набора функций, решающих близкие по.
Competing Consumer Pattern
Competing Consumer Pattern — это архитектурный подход к организации обработки сообщений в распределённых системах.
Read Replicas
Реплика — это точная копия данных из исходной базы данных. Она воспроизводит содержимое основного хранилища на определённый момент времени или с минимальной задержкой относительно текущего состояния.
Shared Nothing Architecture
Shared Nothing Architecture — это подход к построению распределённых вычислительных систем, в котором каждый узел функционирует полностью автономно.
Shared Storage Architecture
Shared Storage Architecture — это подход к организации хранения данных, при котором несколько вычислительных узлов или систем одновременно получают доступ к одному и тому же пулу хранилища.
Single Node architecture
Single Node architecture — это модель построения программных систем, в которой вся логика приложения, все вычислительные задачи, хранение данных и обработка запросов сосредоточены на одном физическом.
Уровни развития API и модель Ричардсона
Интерфейсы программирования приложений (API) служат мостом между различными компонентами программного обеспечения, позволяя им взаимодействовать друг с другом.
Модельная архитектура микросервисов
Микросервисная архитектура представляет собой подход к проектированию программных систем, при котором приложение строится как набор небольших, автономных сервисов.
Стратегии совместного использования кода в микросервисах
Микросервисная архитектура предполагает разбиение монолитного приложения на множество независимых, слабо связанных компонентов, каждый из которых отвечает за конкретную бизнес-функцию.
CQRS
Command Query Responsibility Segregation — это архитектурный паттерн, разделяющий операции чтения данных и операции изменения состояния системы.
Event Sourcing
Event Sourcing — это архитектурный паттерн, в котором состояние системы определяется не текущими значениями данных, а последовательностью событий, которые привели к этому состоянию.
Saga
Современные программные системы всё чаще строятся как набор независимых, слабо связанных сервисов — микросервисов.
Strangler Fig
Название Strangler Fig (инжир-душитель) происходит из биологии. В тропических лесах некоторые виды фикусов начинают свой рост как эпифиты на других деревьях.
Модульный монолит
Модульный монолит представляет собой архитектурный подход к построению программных систем, в котором приложение разрабатывается и развертывается как единое целое, но внутри своей структуры.
Событийно-ориентированная архитектура
Событийно-ориентированная архитектура представляет собой подход к проектированию программных систем, в котором компоненты взаимодействуют между собой посредством обмена событиями.
Сервисно-ориентированная архитектура
Сервисно-ориентированная архитектура — это подход к проектированию программных систем, в котором приложение строится как совокупность слабосвязанных, автономных компонентов, называемых сервисами.
Пространственная архитектура
Пространственная архитектура — это подход к проектированию распределённых систем, в котором основной акцент делается на масштабируемости, отказоустойчивости и высокой производительности за счёт.
Методы и ключ идемпотентности
Идемпотентность — одно из фундаментальных свойств в проектировании программных систем, особенно в распределённых средах, сетевых протоколах и архитектуре приложений.
Архитектура конвейера
Конвейер — это архитектурный паттерн организации вычислений, при котором обработка данных разбивается на последовательные этапы.
Одноранговая архитектура
Одноранговая архитектура, или P2P (peer-to-peer), представляет собой модель организации взаимодействия между участниками компьютерной сети, в которой каждый узел одновременно выступает как клиент и.
Чистая архитектура
Чистая архитектура — это подход к проектированию программного обеспечения, направленный на достижение максимальной независимости от внешних деталей реализации.
Многоуровневая архитектура
Многоуровневая архитектура — это подход к проектированию программных систем, при котором функциональность распределяется по нескольким логическим уровням, каждый из которых отвечает за определённый.
Надежность и доступность
Надежность и доступность — два фундаментальных понятия в проектировании, эксплуатации и оценке технических систем.
Уровни SLA и реальное время простоя
SLA — это соглашение об уровне обслуживания. Это формальный документ, в котором фиксируются обязательства поставщика услуг перед клиентом.
Инженерия устойчивости
Инженерия устойчивости: circuit breaker, retry с backoff, таймауты, сочетание политик и хаос-тестирование для распределённых систем.
Масштабирование чтения и записи в веб-приложении
Масштабирование — это процесс адаптации архитектуры и инфраструктуры веб-приложения к растущей нагрузке.
Стратегии работы с базами данных при разных нагрузках
Работа с базами данных — это центральный элемент большинства современных программных систем.
GRASP и паттерн ADR для веб-бэкенда
Принципы распределения ответственности GRASP и веб-паттерн Action–Domain–Responder для HTTP-приложений.
Event Storming — совместное проектирование домена
Как провести Event Storming с бизнесом и разработкой: уровни workshop, артефакты на выходе, разбор терминов и связь с bounded context и backlog.
Оценка архитектурных альтернатив
Trade-off analysis и architecture review: как сравнивать варианты по NFR, фиксировать решение в ADR и объяснять выбор команде без споров "на вкус".
Threat modeling для архитекторов
Угрозы на уровне архитектуры: STRIDE-lite, границы доверия на C4, разбор терминов и чек-лист перед релизом для новичка.
Clean Architecture на ASP.NET Core
Сквозной разбор эталонного шаблона jasontaylordev/CleanArchitecture: четыре проекта, vertical slices, MediatR, Aspire и типичные ошибки на .NET.
Паттерны перехода от монолита к микросервисам
Strangler Fig, Parallel Run, Decorating Collaborator и CDC — четыре распространённых приёма поэтапной миграции без "большого взрыва".
Проектирование — о разделе
Методы проектирования ПО: NFR, API, БД, распределённые системы, workshop и оценка альтернатив — с рекомендуемым порядком чтения.
В подборках
Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:
Техлид — Паттерны проектирования — о разделе, Архитектура выполнения — о разделе, Роль и практика архитектора программного обеспечения, Микросервисы и интеграция — о разделе, Проектирование и архитектура — о разделе, Культура кода — о разделе.
Архитектура и проектирование ПО — Паттерны проектирования — о разделе, Методы защиты пользовательских и корпоративных данных, Проектирование и архитектура — о разделе, Микросервисы и интеграция — о разделе, Архитектура десктопных приложений, Контейнеризация и оркестрация — о разделе.