Вопрос проверяет способность учитывать требования, команды, нагрузку и развитие системы при выборе архитектуры.
При выборе архитектуры учитывают требования, технические ограничения, опыт команды, ожидаемую нагрузку, сложность домена, бюджет, безопасность и требования к observability. Архитектура должна быть сбалансированной — не слишком сложной, но устойчивой к росту.
Выбор архитектуры — это стратегическое решение, влияющее на стоимость разработки, сложность поддержки и масштабирование системы. Ошибки на этом уровне дорого обходятся, поэтому важно учитывать все ключевые факторы.
функциональные требования формируют основной набор сервисов;
нефункциональные требования определяют ограничения: SLA, задержки, пропускная способность, требования к безопасности;
сценарии использования помогают выделить критические пути (hot paths).
Все эти элементы определяют, насколько система должна быть распределённой и насколько она должна масштабироваться.
Здесь анализируются:
стартовая нагрузка;
потенциальный рост в 3–10 раз;
пиковые нагрузки (черная пятница, high-traffic события);
объём данных, который будет расти постоянно.
Если нагрузка низкая — не нужен микросервисный зоопарк.
Если нагрузка очень высокая — монолит станет узким местом.
Простые домены → монолит или модульная архитектура.
Сложные домены с множеством bounded contexts → микросервисная архитектура или DDD-подход.
Ошибочно применять микросервисы там, где достаточно хорошо спроектированного монолита.
возможность поддержки выбранной архитектуры;
опыт работы с Kubernetes, Kafka, микросервисами, CI/CD;
возможность найма специалистов.
Если команда не умеет в микросервисы — лучше монолит, который можно позже разбить.
Нужно учитывать:
доступные базы данных;
требования к ACID/BASE;
необходимость real-time обработки;
требования к задержкам;
ограничения в инфраструктуре (on-prem/cloud/hybrid).
Например, выбор между Kafka и RabbitMQ зависит от паттернов обработки событий.
изоляция сервисов;
контроль доступа;
защита данных;
ограждение критичных компонентов.
Некоторые архитектурные решения могут быть продиктованы именно безопасностью.
микросервисы дороже в обслуживании;
монолит проще и дешевле, но хуже в масштабировании;
Kubernetes требует более дорогой инфраструктуры.
Архитектура должна учитывать финансовые ограничения.
Хорошая архитектура предусматривает:
централизованное логирование;
метрики;
трейсинг;
дашборды;
оповещения.
Наблюдаемость — обязательная часть любого современного распределённого решения.
Выбор архитектуры зависит от нагрузки, требований, компетенций команды, сложности домена, ограничений инфраструктуры, бюджета и требований к observability. Архитектура должна быть практичной, адаптивной и способной развиваться вместе с продуктом.