Архитектурные требования и ограничения
Введение: правила строительства 🏗️
Можно придумать красивый дом, но если грунт слабый — нужен другой фундамент.
Архитектурные требования и ограничения задают рамки, в которых можно строить систему.
Архитектурные требования и ограничения задают рамки, в которых можно строить систему.
Эта лекция про то, как фиксировать архитектурные решения и ограничения, чтобы проект не развалился на этапе реализации.
💡 Совет: архитектура — это не «вкус», а набор ограничений и компромиссов.
✅ Вывод: чёткие архитектурные требования защищают систему от дорогих переделок.
✅ Вывод: чёткие архитектурные требования защищают систему от дорогих переделок.
Проблема: «сделали, но не проходит по инфраструктуре» ❌
Без архитектурных требований:
- команда выбирает разные технологии;
- интеграции ломаются из‑за несовместимости;
- инфраструктура не выдерживает нагрузку.
С требованиями:
- все понимают рамки;
- решения согласованы заранее;
- меньше технического долга.
✅ Вывод: архитектурные ограничения — это страховка проекта.
Чем помогает и как работает
- Помогает синхронизировать команды вокруг единой структуры системы и технологических рамок.
- Помогает снизить технический долг за счёт ранней фиксации ограничений и границ интеграций.
- Помогает заранее оценить масштабирование, безопасность и риски внедрения.
Как это работает:
- Шаг 1: фиксируем архитектурный стиль и зоны ответственности.
- Шаг 2: задаём ограничения по стеку, инфраструктуре и безопасности.
- Шаг 3: добавляем требования к нагрузке и интеграционным границам.
- Шаг 4: документируем ключевые решения в ADR.
- Шаг 5: определяем критерии приёмки и проверку архитектуры.
✅ Вывод: архитектурные требования превращают «делаем как удобнее» в согласованный инженерный контракт.
Ключевые термины (простыми словами)
- Architecture Requirement (архитектурное требование) — требование к структуре и ключевым решениям системы.
- Constraint (ограничение) — жёстное условие, которое нельзя нарушать.
- Tech Stack (стек технологий) — набор обязательных технологий.
- Deployment Model (модель развёртывания) — где и как работает система.
- Integration Boundary (граница интеграции) — как и с кем система взаимодействует.
- Quality Attributes (качества) — скорость, масштабируемость, надёжность.
- ADR (Architecture Decision Record) — документ решения с причиной.
✅ Вывод: эти термины помогают фиксировать архитектуру как договор.
Самое важное (must-know)
- Архитектурное требование описывает структуру и качество системы, ограничение задаёт жёсткую рамку.
- Стек, облако и интеграционные правила должны быть зафиксированы до активной разработки.
- Нагрузка и масштабирование обязаны иметь численные параметры (rps, p95, пределы роста).
- Прямые интеграции в БД между системами — архитектурный анти-паттерн.
- Ключевые решения фиксируются в ADR вместе с причинами и trade-off.
✅ Вывод: без этих пунктов архитектура становится неуправляемой и конфликтной.
1. Архитектурные требования
Назначение: описать ключевые решения структуры системы.
Простыми словами: архитектурные требования задают каркас системы: как она разделена, кто за что отвечает и как части взаимодействуют.
Аналогия: тип дома — дом, многоэтажка или модульный.
Простыми словами: архитектурные требования задают каркас системы: как она разделена, кто за что отвечает и как части взаимодействуют.
Аналогия: тип дома — дом, многоэтажка или модульный.
Пример:
Система должна быть разделена на сервисы: каталог, оплата, профиль.🔎 Как это происходит на практике:
- Техлид выделяет ключевые домены и сервисы.
- Команда фиксирует границы ответственности каждого сервиса.
- Архитектура сверяется с целевой нагрузкой и roadmap.
- Согласованная схема фиксируется в документе.
Характеристики:
- ✅ определяют структуру;
- ✅ влияют на масштабирование;
- ✅ задают границы ответственности.
Когда использовать: при старте проекта или крупном рефакторинге.
✅ Вывод: архитектура должна быть явно зафиксирована.
✅ Вывод: архитектура должна быть явно зафиксирована.
2. Архитектурные ограничения
Назначение: задать жёсткие рамки.
Простыми словами: архитектурные ограничения — это обязательные правила, которые нельзя менять локально без отдельного решения.
Аналогия: «строим только из кирпича».
Простыми словами: архитектурные ограничения — это обязательные правила, которые нельзя менять локально без отдельного решения.
Аналогия: «строим только из кирпича».
Пример:
База данных: только PostgreSQL.Развёртывание: только в AWS.🔎 Как это происходит на практике:
- Собираются корпоративные и регуляторные ограничения.
- Определяются обязательные технологии и платформа.
- Проверяется влияние ограничений на сроки и бюджет.
- Ограничения утверждаются и становятся частью контракта.
Характеристики:
- ✅ не обсуждаются без согласования;
- ✅ влияют на стоимость и сроки;
- ✅ ограничивают выбор решений.
Когда использовать: при наличии корпоративных стандартов или юридических требований.
✅ Вывод: ограничения — это обязательные правила игры.
✅ Вывод: ограничения — это обязательные правила игры.
3. Нагрузка и масштабируемость
Назначение: учесть рост и пики.
Простыми словами: нагрузка и масштабирование определяют, сможет ли архитектура выдержать реальный рост продукта.
Аналогия: дорога должна выдерживать пробки.
Простыми словами: нагрузка и масштабирование определяют, сможет ли архитектура выдержать реальный рост продукта.
Аналогия: дорога должна выдерживать пробки.
Пример:
Пик: 1000 rps, p95 <= 300 мс.🔎 Как это происходит на практике:
- Аналитик фиксирует профиль нагрузки и пик.
- Задаются целевые метрики производительности (например, p95).
- Архитектура проверяется нагрузочными тестами.
- При отклонениях пересматриваются узкие места и масштабирование.
Характеристики:
- ✅ задают требования к инфраструктуре;
- ✅ влияют на архитектурный стиль;
- ✅ помогают планировать ресурсы.
Когда использовать: для публичных сервисов и роста.
✅ Вывод: без требований к нагрузке архитектура «слепая».
✅ Вывод: без требований к нагрузке архитектура «слепая».
4. Интеграционные границы
Назначение: определить, как системы общаются.
Простыми словами: границы интеграции защищают систему от хаоса и позволяют менять внутреннюю реализацию без ломки внешних связей.
Аналогия: ворота и пропускной пункт.
Простыми словами: границы интеграции защищают систему от хаоса и позволяют менять внутреннюю реализацию без ломки внешних связей.
Аналогия: ворота и пропускной пункт.
Пример:
Интеграция с CRM только через REST API, без прямого доступа к БД.🔎 Как это происходит на практике:
- Определяются разрешённые интерфейсы интеграций.
- Запрещаются обходные пути (например, прямой доступ в БД).
- Документируются контракты и версии API.
- На ревью проверяется соблюдение границ всеми командами.
Характеристики:
- ✅ фиксируют интерфейсы;
- ✅ защищают систему от обходных решений;
- ✅ облегчают сопровождение.
Когда использовать: при работе с внешними системами.
✅ Вывод: границы интеграции защищают архитектуру.
✅ Вывод: границы интеграции защищают архитектуру.
5. Инфраструктурные требования
Назначение: зафиксировать среду работы системы.
Простыми словами: инфраструктурные требования фиксируют среду исполнения, чтобы поведение системы было предсказуемым на всех этапах.
Аналогия: «строим дом только на этом участке».
Простыми словами: инфраструктурные требования фиксируют среду исполнения, чтобы поведение системы было предсказуемым на всех этапах.
Аналогия: «строим дом только на этом участке».
Пример:
ОС: LinuxКонтейнеры: DockerCI/CD: GitHub Actions🔎 Как это происходит на практике:
- Команда выбирает стандарт ОС и контейнеризации.
- Фиксируется CI/CD и правила деплоя.
- Проверяется совместимость сред разработки и прода.
- Стандарты включаются в Definition of Done.
Характеристики:
- ✅ единая среда;
- ✅ снижает риск несовместимости;
- ✅ упрощает поддержку.
Когда использовать: при корпоративных стандартах.
✅ Вывод: инфраструктура — часть требований.
✅ Вывод: инфраструктура — часть требований.
6. Безопасность как архитектурное ограничение
Назначение: защитить данные и доступ.
Простыми словами: безопасность на уровне архитектуры задаёт обязательные технические меры, а не пожелания «по возможности».
Аналогия: охрана на объекте.
Простыми словами: безопасность на уровне архитектуры задаёт обязательные технические меры, а не пожелания «по возможности».
Аналогия: охрана на объекте.
Пример:
Все сервисы общаются только по mTLS.Данные PII шифруются в покое.🔎 Как это происходит на практике:
- Определяются критичные данные и каналы обмена.
- Фиксируются требования к шифрованию и транспорту.
- Проверяется соответствие требованиям compliance.
- Меры безопасности включаются в архитектурные ограничения.
Характеристики:
- ✅ жёсткие требования;
- ✅ влияет на дизайн системы;
- ✅ обязательны для compliance.
Когда использовать: при работе с персональными данными.
✅ Вывод: безопасность — это архитектура, а не опция.
✅ Вывод: безопасность — это архитектура, а не опция.
7. ADR: фиксация решений
Назначение: объяснить, почему архитектура такая.
Простыми словами: ADR нужен, чтобы сохранить не только выбор решения, но и причину выбора с его компромиссами.
Аналогия: записка «почему выбрали этот маршрут».
Простыми словами: ADR нужен, чтобы сохранить не только выбор решения, но и причину выбора с его компромиссами.
Аналогия: записка «почему выбрали этот маршрут».
Пример:
ADR‑01: выбран PostgreSQL из‑за транзакций и зрелой экосистемы.🔎 Как это происходит на практике:
- Для решения описывается контекст и доступные варианты.
- Фиксируется выбранный вариант и аргументация.
- Указываются последствия и ограничения решения.
- ADR связывается с задачами реализации и проверкой.
Характеристики:
- ✅ сохраняет контекст решений;
- ✅ помогает новым участникам;
- ✅ снижает риск повторных споров.
Когда использовать: при важных архитектурных решениях.
✅ Вывод: ADR делает архитектуру прозрачной.
✅ Вывод: ADR делает архитектуру прозрачной.
Сравнение: требование vs ограничение
| Параметр | Требование | Ограничение |
|---|---|---|
| Гибкость | можно обсуждать | жёсткое |
| Источник | бизнес/тех | политика/регламент |
| Пример | «масштабируемость» | «только AWS» |
Часто спрашивают на собеседованиях
- Чем архитектурное требование отличается от ограничения? требование можно выбирать, ограничение — жёсткое.
- Зачем фиксировать стек технологий? чтобы избежать несовместимости.
- Что такое ADR? запись архитектурного решения с причиной.
- Почему важны интеграционные границы? защита от хаоса и прямых доступов.
- Как нагрузка влияет на архитектуру? определяет масштабирование.
✅ Вывод: это ключевые вопросы по архитектурным требованиям.
Типичные ошибки
Ошибка 1: стек не зафиксирован
❌ разные команды используют разные БД
✅ единый стек
✅ единый стек
Ошибка 2: нет ограничений
❌ инфраструктура не выдерживает
✅ жёсткие рамки
✅ жёсткие рамки
Ошибка 3: интеграции напрямую в БД
❌ ломают архитектуру
✅ только через API
✅ только через API
Ошибка 4: нет требований к нагрузке
❌ система падает в пик
✅ описан пик и метрики
✅ описан пик и метрики
Ошибка 5: решения не задокументированы
❌ спорим заново
✅ ADR с причинами
✅ ADR с причинами
Best Practices
- Фиксируйте архитектурный стиль и ключевые решения.
- Описывайте жёсткие ограничения заранее.
- Указывайте требования к нагрузке и масштабированию.
- Запрещайте прямой доступ к чужим БД (только через API).
- Документируйте решения в ADR.
Заключение
Ключевые мысли
🎯 Архитектурные требования задают структуру.
🎯 Ограничения защищают от неверных решений.
🎯 ADR и метрики делают архитектуру прозрачной.
🎯 Ограничения защищают от неверных решений.
🎯 ADR и метрики делают архитектуру прозрачной.
Теперь вы умеете фиксировать архитектуру так, чтобы проект был устойчивым.