Архитектура и документация
Архитектурная грамотность аналитика — монолит против микросервисов, HLD, артефакты документации и диаграммы системы, модели управления доступом и кэширование.
20 вопросов
JuniorТеорияОчень частоЧем различаются идентификация, аутентификация и авторизация?
Чем различаются идентификация, аутентификация и авторизация?
Идентификация — заявление, кто вы (логин или id). Аутентификация — доказательство заявления (пароль, токен, биометрия). Авторизация — решение, что аутентифицированной личности разрешено делать. Порядок фиксирован — идентификация, аутентификация, авторизация действия.
Типичные ошибки
- ✗Менять местами аутентификацию (доказательство личности) и авторизацию (права)
- ✗Считать идентификацию и аутентификацию одним шагом
- ✗Забывать, что авторизация — на каждое действие по правам
Уточняющие вопросы
- →Чем токен отличается от сессии при аутентификации?
- →Что такое принцип наименьших привилегий в авторизации?
JuniorТеорияОчень частоЧто такое клиент-серверная архитектура и какие уровни у трёхуровневого приложения?
Что такое клиент-серверная архитектура и какие уровни у трёхуровневого приложения?
Клиент-сервер делит ПО на клиента, запрашивающего услугу, и сервер, выполняющий её по сети. Трёхуровневое приложение разделяет уровень представления (UI), уровень прикладной логики и уровень данных, каждый из которых масштабируется независимо.
Типичные ошибки
- ✗Менять местами роли клиента (запрашивает) и сервера (предоставляет)
- ✗Сливать прикладную логику в уровень представления или данных
- ✗Думать, что три уровня обязаны разворачиваться и масштабироваться вместе
Уточняющие вопросы
- →Почему разделение уровней позволяет масштабировать их независимо?
- →Где в трёхуровневом приложении место бизнес-правилам?
JuniorТеорияОчень частоЧто такое слоистая (layered) архитектура и за что отвечает каждый слой?
Что такое слоистая (layered) архитектура и за что отвечает каждый слой?
Слоистая архитектура складывает код в горизонтальные слои, у каждого одна работа: представление, бизнес-логика, доступ к данным и база. Слой вызывает только слой прямо под ним, поэтому зависимости идут в одну сторону, а слой тестируется отдельно.
Типичные ошибки
- ✗Пускать UI прямо в базу, минуя средние слои
- ✗Переворачивать, какой слой владеет правилами, а какой данными
- ✗Разрешать зависимостям указывать в обе стороны
Уточняющие вопросы
- →Почему слой должен зависеть только от слоя прямо под ним?
- →Какая проблема возникает, когда UI обходит слой бизнес-логики?
JuniorТеорияОчень частоЧто такое монолитная и микросервисная архитектура и чем они различаются?
Что такое монолитная и микросервисная архитектура и чем они различаются?
Монолит — одно развёртываемое приложение, где все модули делят процесс и обычно одну базу — просто собирать, но трудно масштабировать по частям. Микросервисы разбивают систему на независимо развёртываемые сервисы, каждый владеет своими данными и общается по сети — гибко, ценой сложности распределённой системы.
Типичные ошибки
- ✗Менять местами определения монолита и микросервисов
- ✗Утверждать, что микросервисы всегда проще в эксплуатации
- ✗Забывать, что микросервисы добавляют сложность распределённой системы
Уточняющие вопросы
- →Какой минус у общей базы в монолите при росте команды?
- →Почему микросервисам нужна забота о консистентности данных?
JuniorТеорияЧастоКакие архитектурные представления и документы аналитик передаёт разработчику и что входит в каждое?
Какие архитектурные представления и документы аналитик передаёт разработчику и что входит в каждое?
Аналитик передаёт представления, фиксирующие, что строить: компонентную диаграмму (части и зоны ответственности), диаграммы последовательности (ход сценария), модель данных (сущности и связи) и контракты API. Каждое отвечает на свой вопрос.
Типичные ошибки
- ✗Отдавать только код, ожидая, что дизайн додумают
- ✗Путать, какое представление показывает структуру, поведение, данные или интерфейсы
- ✗Опускать контракты интеграций и API из передачи
Уточняющие вопросы
- →Какое представление говорит разработчику об объёме и границах сервиса?
- →Почему явный контракт API лучше описания прозой?
MiddleТеорияЧастоКакие модели управления доступом вы знаете и что такое принцип наименьших привилегий?
Какие модели управления доступом вы знаете и что такое принцип наименьших привилегий?
RBAC (ролевая) выдаёт права через роли, назначенные пользователю. ABAC (атрибутивная) решает доступ по атрибутам пользователя, ресурса и контекста — гибче, но сложнее. Наименьшие привилегии дают только минимально необходимые права, сужая радиус поражения.
Типичные ошибки
- ✗Менять местами определения RBAC и ABAC
- ✗Толковать наименьшие привилегии как выдачу широких или админских прав
- ✗Считать ABAC всегда лучшей, игнорируя, что она сложнее RBAC
Уточняющие вопросы
- →Когда ABAC оправдан вместо RBAC?
- →Как принцип наименьших привилегий снижает ущерб при взломе?
MiddleТеорияЧастоЧто такое API Gateway, что он делает сверх балансировщика нагрузки и что такое BFF?
Что такое API Gateway, что он делает сверх балансировщика нагрузки и что такое BFF?
API Gateway — единая точка входа перед микросервисами: маршрутизация плюс сквозные заботы — аутентификация, ограничение частоты, агрегация, версионирование. Балансировщик лишь распределяет трафик на сетевом уровне. BFF (backend-for-frontend) — шлюз под один тип клиента.
Типичные ошибки
- ✗Приравнивать API Gateway к обычному балансировщику нагрузки
- ✗Упускать сквозные заботы вроде аутентификации и ограничения частоты
- ✗Думать, что BFF обслуживает все типы клиентов одинаково
Уточняющие вопросы
- →Почему единый API Gateway может стать узким местом или точкой отказа?
- →Когда отдельный BFF на клиента лучше одного общего шлюза?
MiddleДизайнЧастоВ системе медленные ответы API при повторных одинаковых запросах. Где и как вы предложите кэширование и как продумаете инвалидацию, чтобы не отдавать устаревшие данные?
В системе медленные ответы API при повторных одинаковых запросах. Где и как вы предложите кэширование и как продумаете инвалидацию, чтобы не отдавать устаревшие данные?
Кэшируйте, где чтение повторяется, а данные меняются медленно: кэш API на бэкенде (proxy/in-memory) и кэш на клиенте для пользователя. Инвалидируйте через TTL и/или событийно, когда запись обновляет ключи. Учитывайте холодный кэш и прогретый. Компромисс — задержка против устаревания.
Типичные ошибки
- ✗Кэшировать без инвалидации, отдавая устаревшие данные
- ✗Путать холодный кэш (медленный первый запрос) с прогретым
- ✗Игнорировать компромисс задержка-устаревание при выборе TTL против событийной
Уточняющие вопросы
- →Когда событийная инвалидация лучше TTL?
- →Чем рискован кэш на клиенте для общих данных?
MiddleТеорияЧастоКаковы плюсы и минусы монолита и микросервисов и когда выбирать каждый подход?
Каковы плюсы и минусы монолита и микросервисов и когда выбирать каждый подход?
Монолит проще разрабатывать, развёртывать и тестировать — внутрипроцессные вызовы, единая граница транзакции — но масштабируется целиком и становится хрупким с ростом. Микросервисы дают независимое развёртывание, масштаб по сервисам и автономию команд ценой сетевых задержек, распределённых транзакций и более тяжёлой эксплуатации. Выбирайте монолит для ранних продуктов; переходите при росте масштаба, команды или независимости релизов.
Типичные ошибки
- ✗Считать микросервисы строго лучше без компромиссов
- ✗Приписывать боль распределённых транзакций монолиту
- ✗Игнорировать размер команды и независимость релизов в решении
Уточняющие вопросы
- →Почему распределённые транзакции сложны в микросервисах?
- →Какие предпосылки оправдывают переход монолита к микросервисам?
MiddleТеорияЧастоПо каким критериям вы делите систему на микросервисы и что делает границу неверной?
По каким критериям вы делите систему на микросервисы и что делает границу неверной?
Делите по бизнес-способности или bounded context, чтобы сервис владел одной цельной областью и своими данными. Граница неверна, когда сценарий требует болтливой цепочки сервисов, два сервиса делят одну транзакционную запись или всегда разворачиваются вместе.
Типичные ошибки
- ✗Делить по техническому слою вместо бизнес-способности
- ✗Считать межсервисные вызовы и общие данные бесплатными
- ✗Игнорировать синхронный деплой как признак неверной границы
Уточняющие вопросы
- →Почему bounded context — лучший шов, чем технический слой?
- →О чём говорит общая запись через два сервиса о разделении?
MiddleТеорияЧастоЧто на самом деле означает «независимость» микросервиса — по коду, данным, деплою и релизу?
Что на самом деле означает «независимость» микросервиса — по коду, данным, деплою и релизу?
Независимость означает, что сервис может меняться и выпускаться сам по четырём осям. Код: свой репозиторий, без общей сборки. Данные: своя база только через его API. Деплой: выходит без передеплоя остальных. Релиз: функции выходят за версионированным API.
Типичные ошибки
- ✗Сводить независимость только к отдельной кодовой базе
- ✗Разрешать другому сервису читать его базу напрямую
- ✗Забывать, что независимость релиза требует версионированного API
Уточняющие вопросы
- →Почему общая база ломает независимость сервисов?
- →Как версионированный API защищает независимость релиза?
SeniorДизайнЧастоВас просят подготовить High Level Design для новой подсистемы. Объясните, что такое HLD, зачем и кому он нужен, что должно в него входить и до какой степени его прорабатывают.
Вас просят подготовить High Level Design для новой подсистемы. Объясните, что такое HLD, зачем и кому он нужен, что должно в него входить и до какой степени его прорабатывают.
HLD (high-level design) — описание уровня архитектуры того, как будет построена система, для архитекторов, лидов и стейкхолдеров, чтобы согласовать решение до детального проектирования. Он содержит основные компоненты, интеграции и потоки данных, архитектурный стиль, ключевые нефункциональные решения и внешние зависимости. Он намеренно неглубок — детали реализации заполняет low-level design.
Типичные ошибки
- ✗Делать HLD слишком детальным (уровня реализации), а не архитектурным
- ✗Опускать нефункциональные решения (масштаб, доступность, безопасность)
- ✗Путать аудиторию и глубину HLD с low-level design
Уточняющие вопросы
- →Чем HLD отличается от low-level design по глубине?
- →Какие нефункциональные решения обязательно отразить в HLD?
SeniorДизайнЧастоКоманда держит рабочий e-commerce монолит на стабильном трафике с маленькой командой эксплуатации, и руководство хочет разбить его на 15 микросервисов ради модернизации и независимых релизов. Приведите доводы за и против разбиения, назовите конкретные риски, которые берёт на себя команда, и предложите прагматичный первый шаг — какие один-два сервиса вы вынесли бы первыми и почему, и что должно быть готово по владению данными, развёртыванию и наблюдаемости до выноса остальных.
Команда держит рабочий e-commerce монолит на стабильном трафике с маленькой командой эксплуатации, и руководство хочет разбить его на 15 микросервисов ради модернизации и независимых релизов. Приведите доводы за и против разбиения, назовите конкретные риски, которые берёт на себя команда, и предложите прагматичный первый шаг — какие один-два сервиса вы вынесли бы первыми и почему, и что должно быть готово по владению данными, развёртыванию и наблюдаемости до выноса остальных.
За: независимый деплой, масштаб по сервисам и автономия команд, когда монолит тормозит релизы. Против: 15 сервисов добавляют сеть, распределённые транзакции и нагрузку эксплуатации. Strangler: вынести один-два слабосвязанных сервиса первыми.
Типичные ошибки
- ✗Советовать разом вынести все 15 сервисов сразу
- ✗Игнорировать нагрузку на эксплуатацию для маленькой команды
- ✗Выносить тесно связанное ядро раньше слабых краёв
Уточняющие вопросы
- →Почему выносить слабосвязанный сервис раньше ядра?
- →Чем должен владеть сервис, чтобы разворачиваться независимо?
JuniorТеорияИногдаКакие артефакты обязательно должны быть в документации системы?
Какие артефакты обязательно должны быть в документации системы?
Базовые артефакты документации: описание бизнес-процесса; пользовательские сценарии; краткие описания бизнес-задач ПО; структура БД; схемы потоков данных, интеграций и сервисного взаимодействия; внешние интеграции; описание собственных API с версионированием; аутентификация/авторизация/идентификация; и матрицы ролей/пермишенов.
Типичные ошибки
- ✗Называть только API, опуская бизнес-процесс или матрицы ролей
- ✗Забывать описание внешних интеграций
- ✗Пропускать версионирование API в документации
Уточняющие вопросы
- →Зачем в описании API нужно версионирование?
- →Что показывает матрица ролей/пермишенов?
JuniorТеорияИногдаКакие архитектурные стили вы знаете и как каждый организует систему?
Какие архитектурные стили вы знаете и как каждый организует систему?
Основные стили — монолит (один развёртываемый блок), микросервисы (маленькие независимые сервисы), SOA (крупные сервисы на общей шине), event-driven (реагируют на события) и serverless (функции по требованию). Каждый меняет простоту на масштаб.
Типичные ошибки
- ✗Путать SOA с микросервисами, игнорируя общую шину
- ✗Называть event-driven или serverless единственным лучшим стилем
- ✗Упускать, что каждый стиль меняет простоту на масштаб
Уточняющие вопросы
- →Чем шина интеграции SOA отличается от прямых вызовов сервис-сервис?
- →Когда serverless плохо подходит, несмотря на масштаб по требованию?
MiddleТеорияИногдаЧто такое CQRS, когда разделение оправдано и чего стоит модель чтения?
Что такое CQRS, когда разделение оправдано и чего стоит модель чтения?
CQRS (Command Query Responsibility Segregation) разделяет сторону записи (команды) и чтения (запросы). Окупается, когда чтение и запись резко различаются по нагрузке или форме. Цена — модель чтения, синхронизируемая асинхронно, с eventual consistency.
Типичные ошибки
- ✗Переворачивать CQRS в слияние чтения и записи
- ✗Применять его везде независимо от асимметрии чтения/записи
- ✗Игнорировать eventual consistency, вносимую моделью чтения
Уточняющие вопросы
- →Почему асинхронная модель чтения даёт eventual consistency?
- →Когда CQRS естественно сочетается с Event Sourcing?
MiddleТеорияИногдаЧто такое Event Sourcing, что он хранит и что усложняет?
Что такое Event Sourcing, что он хранит и что усложняет?
Event Sourcing хранит состояние как append-only лог событий, а не только последний снимок. Состояние восстанавливают воспроизведением событий, что даёт полный аудит. Усложняет: запросы, эволюцию схемы и исправления через компенсирующие события.
Типичные ошибки
- ✗Думать, что он хранит только последний снимок, а не события
- ✗Считать, что произвольные запросы легки без проекций
- ✗Чинить ошибки правкой истории вместо компенсирующего события
Уточняющие вопросы
- →Почему Event Sourcing обычно требует отдельных read-проекций?
- →Как исправить ошибку, не правя лог событий?
MiddleТеорияИногдаЧем SOA (service-oriented architecture) отличается от микросервисов — только ли в ESB (enterprise service bus) разница?
Чем SOA (service-oriented architecture) отличается от микросервисов — только ли в ESB (enterprise service bus) разница?
Нет, ESB (enterprise service bus) — не единственное отличие. SOA использует крупные общие сервисы на центральной шине интеграции. Микросервисы мелкие, каждый владеет своими данными и общается точка-точка, значит, разница ещё и в гранулярности.
Типичные ошибки
- ✗Сводить всю разницу только к ESB
- ✗Игнорировать владение данными и гранулярность сервисов
- ✗Забывать, что SOA централизует логику интеграции на шине
Уточняющие вопросы
- →Почему центральная шина — риск связанности и масштаба в SOA?
- →Как владение данными на сервис меняет работу с консистентностью?
SeniorДизайнИногдаСпроектируйте высокоуровневую архитектуру подсистемы, которая должна принимать 5000 платёжных запросов в секунду и не терять ни одного, даже если нижестоящий сервис ненадолго недоступен. Назовите ключевые компоненты, как вы гарантируете сохранность и отсутствие двойного списания и где главные узкие места и точки отказа.
Спроектируйте высокоуровневую архитектуру подсистемы, которая должна принимать 5000 платёжных запросов в секунду и не терять ни одного, даже если нижестоящий сервис ненадолго недоступен. Назовите ключевые компоненты, как вы гарантируете сохранность и отсутствие двойного списания и где главные узкие места и точки отказа.
Принимайте запросы за балансировщиком, сохраняйте каждый в надёжную очередь до подтверждения, затем обрабатывайте асинхронно — сбой нижестоящего сервиса задерживает, но не теряет работу. Двойное списание гасит ключ идемпотентности на платёж. Узкие места — хранилище и очередь.
Типичные ошибки
- ✗Обрабатывать синхронно, теряя запросы при сбое нижестоящего сервиса
- ✗Опускать ключ идемпотентности, допуская двойное списание при повторе
- ✗Упускать хранилище и очередь как узкие места и точки отказа
Уточняющие вопросы
- →Как ключ идемпотентности предотвращает двойное списание при повторе клиента?
- →Зачем сохранять в надёжную очередь до подтверждения запроса?
JuniorТеорияРедкоЧто такое АИС и как она декомпозируется на подсистемы в терминах ГОСТ 34?
Что такое АИС и как она декомпозируется на подсистемы в терминах ГОСТ 34?
АИС (автоматизированная информационная система) собирает, обрабатывает и выдаёт информацию для задач организации. В терминах ГОСТ 34 она делится на функциональные подсистемы по бизнес-функции и обеспечивающие: техническое и программное обеспечение.
Типичные ошибки
- ✗Считать АИС неделимым целым без подсистем
- ✗Путать функциональные и обеспечивающие подсистемы
- ✗Забывать, что оборудование и данные — подсистемы по стандарту
Уточняющие вопросы
- →Что относится к обеспечивающей подсистеме против функциональной?
- →Почему функциональные подсистемы группируют по бизнес-функции?