Проектирование программных систем
Каждая система имеет свою архитектуру построения; систему нужно разворачивать под нагрузку; нужно понимать обновления и исправление ошибок; рано или поздно — интеграция, безопасность, расширение и поддержка.
Подходы к проектированию
Подход к проектированию — это стратегия, которая определяет, откуда начинается работа над системой и в каком порядке формируются её компоненты.
Принципы проектирования
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 и оценка альтернатив — с рекомендуемым порядком чтения.