1. Введение в System Design: почему требования — фундамент проектирования
Введение в System Design: почему требования — фундамент проектирования
Добро пожаловать в курс «System Design и нефункциональные требования для системного аналитика». Это первая статья, и мы начнем с главного: почему системный дизайн — это не просто рисование квадратиков и стрелочек, и почему без качественных требований любая архитектура обречена на провал.
Многие аналитики считают, что их работа заканчивается на написании User Stories и описании полей в базе данных. Однако, когда система начинает падать под нагрузкой или данные утекают к злоумышленникам, выясняется, что проблема была заложена в самом начале — на этапе сбора требований.
Что такое System Design?
System Design (Системное проектирование) — это процесс определения архитектуры, компонентов, модулей, интерфейсов и данных для системы с целью удовлетворения заданных требований. Это мост между бизнес-потребностями («хочу интернет-магазин») и технической реализацией (микросервисы, Kubernetes, PostgreSQL).
Для системного аналитика System Design — это умение переводить «хотелки» бизнеса на язык технических ограничений и архитектурных решений. Вы не обязаны писать код, но вы обязаны понимать, как ваши требования влияют на выбор технологий.
Почему требования — это фундамент?
Представьте, что вы строите здание. Если заказчик говорит «нужен дом», вы можете построить деревянную избу. Но если позже выяснится, что в доме будут жить 500 человек, ваша изба рухнет. Фундамент был рассчитан неверно.
В IT происходит то же самое. Согласно habr.com, 80% кандидатов на собеседованиях по System Design проваливаются на одной и той же ошибке — они не фиксируют основные требования к системе. Без четких требований проектирование превращается в хаос, ведущий к неработоспособной архитектуре и перерасходу ресурсов.
Требования определяют не только что делает система, но и как она это делает. Именно здесь проходит граница между функциональными и нефункциональными требованиями.
Функциональные vs Нефункциональные требования
Чтобы спроектировать систему правильно, аналитик должен разделить требования на две категории.
1. Функциональные требования (Functional Requirements — FR)
Описывают поведение системы. Это то, что система должна делать. * Пользователь может зарегистрироваться. * Система должна отправлять уведомление после покупки. * Администратор может заблокировать пользователя.2. Нефункциональные требования (Non-Functional Requirements — NFR)
Описывают свойства системы (атрибуты качества). Это то, как система должна работать. * Время отклика при регистрации не должно превышать 500 мс. * Система должна выдерживать 10 000 одновременных пользователей. * Данные должны быть зашифрованы по стандарту AES-256.Именно нефункциональные требования диктуют архитектуру.
> Виной всему — нефункциональные требования, или НФТ, про которые все слышали, но мало кто действительно умеет их описывать. Проблема в том, что НФТ часто упускают. То ли потому что они не так очевидны, как функциональные требования, то ли потому что их сложно измерить. > > habr.com
Пример: Блог vs Социальная сеть
Рассмотрим простой пример. Функциональное требование одно и то же: «Пользователь может опубликовать текстовое сообщение».Сценарий А: Личный блог * НФТ: 100 просмотров в день, потеря данных за 1 час допустима. * Решение: Обычный монолит (Monolith), одна база данных (например, MySQL), один сервер за 5L\lambdaW\lambda = 1000W = 2W (просто переписать текст в Confluence).
Как отмечается в материалах по архитектуре, умение выбирать базу данных или тип взаимодействия (синхронное/асинхронное) напрямую зависит от собранных требований к нагрузке и доступности (согласно systemanalyst.life).
Роль аналитика в System Design
Ваша задача — не просто транслировать слова бизнеса разработчикам. Вы должны задавать «неудобные» вопросы: * Сколько пользователей придет в «черную пятницу»? * Насколько критично, если история заказов будет недоступна 5 минут? * Как быстро должны появляться данные в отчетах: мгновенно или на следующее утро?
Ответы на эти вопросы формируют атрибуты качества системы, которые мы будем детально разбирать в следующих статьях курса.
Итоги
* System Design — это процесс принятия технических решений на основе требований. Нет требований — нет дизайна. Функциональные требования говорят, что строить, а нефункциональные (НФТ) — как* это должно работать (быстро, надежно, безопасно). * Одинаковые функции могут требовать абсолютно разных архитектурных решений в зависимости от нагрузки и других НФТ. * Использование простых формул, таких как Закон Литтла (), помогает аналитику заранее оценить необходимые ресурсы. * Исправление архитектурной ошибки после релиза стоит в сотни раз дороже, чем на этапе анализа.