BA & SA | 10000 Interview questions
10.2K subscribers
175 photos
14 videos
346 links
Вопросы и задачи, которые задают на собеседованиях на позицию Бизнес и Системного аналитика. По вопросам сотрудничества- @DeliveryManager7
Download Telegram
👩‍🏫Объяснение:
Dead Letter Queue (DLQ) — это механизм повышения надежности. Если система-получатель не может обработать сообщение (например, из-за ошибки в данных, недоступности зависимостей, бага в коде), оно возвращается в очередь. После нескольких неудачных попыток обработки (retries) брокер сообщений автоматически перемещает такое «отравленное» сообщение в DLQ.
Цели DLQ:
1. Изоляция проблемных сообщений, чтобы они не блокировали обработку других сообщений в основной очереди.
2. Анализ причин сбоев инженерами вручную.
3. Возможность восстановления: после исправления ошибки сообщения из DLQ можно вернуть в основную очередь для повторной обработки.
№4609 категория вопросов: #INTEGRATION
👩‍🏫Объяснение:
CDC — это мощный паттерн интеграции, позволяющий реагировать на изменения данных почти в реальном времени с минимальной нагрузкой на источник.
* Как работает: Специальный агент (например, Debezium) читает журнал транзакций БД (например, binlog в MySQL, WAL в PostgreSQL), в который СУБД записывает все изменения. Агент преобразует эти низкоуровневые изменения в события (например, «в таблице Orders добавлена запись с id=123») и публикует их в брокер сообщений (Kafka).
* Преимущества перед опросом (polling, вариант A): Нет нагрузки лишними запросами, задержка минимальна,捕获 все изменения без пропусков.
Это основа для построения event-driven архитектур и актуальных зеркал данных.
№4610 категория вопросов: #INTEGRATION
👩‍🏫Объяснение:
В монолитной системе с одной БД согласованность обеспечивается ACID-транзакциями. В микросервисной архитектуре, где каждый сервис управляет своей собственной базой данных, классические распределенные транзакции (2PC) непрактичны. Паттерн «Сага» решает эту проблему, разбивая единую транзакцию на последовательность локальных транзакций в каждом сервисе.
* Как работает: Каждая локальная транзакция публикует событие, которое запускает следующую локальную транзакцию в другом сервисе. Если на каком-то шаге происходит ошибка, Сага запускает серию компенсирующих транзакций (compensating transactions) для отката изменений, сделанных на предыдущих шагах (например, не «отменить платеж», а «запустить процесс возврата средств»).
Это паттерн event-driven оркестрации или хореографии для поддержания eventual consistency в распределенных бизнес-процессах (например, «Оформление заказа» с участием сервисов Заказов, Платежей и Склада).
№4611 категория вопросов: #INTEGRATION
👩‍🏫Объяснение:
Идемпотентность — это не просто техническое требование, а ключевой принцип проектирования надежных интеграций в распределенных системах, где сетевые сбои, таймауты и повторные отправки запросов — это норма.
Почему это так важно?
Представьте, что клиентское приложение отправляет запрос на списание денег, но не получает ответ из-за обрыва сети. Что делает разумный клиент? Он отправляет запрос повторно. Без идемпотентности это привело бы к двойному списанию — катастрофическая ошибка.
С идемпотентностью:
* Сколько бы раз ни пришел идентичный запрос (с одним и тем же payment_id и суммой), сервис платежей обработает его так, будто это первый раз, и вернет тот же результат. Деньги спишутся один раз.
Как это достигается на практике?
1. Использование уникальных ключей: Сервис сохраняет ID обработанного запроса и проверяет, не обрабатывался ли он уже.
2. Семантика HTTP-методов: Методы GET, PUT, DELETE по спецификации должны быть идемпотентными. POST — не идемпотентен (каждый вызов создает новый ресурс), поэтому для него нужно предусматривать механизмы идемпотентности отдельно.
3. Пример из жизни: Нажатие кнопки «Отправить» в лифте. Сколько бы вы ни нажимали на кнопку этажа, лифт поедет только один раз на нужный этаж.
Роль системного аналитика: При описании интеграционных API вы должны явно указывать, какие операции должны быть идемпотентными (особенно изменяющие состояние: обновление статуса, списания, отмены), и обеспечивать это требование в контракте.
№4612 категория вопросов: #INTEGRATION
👩‍🏫Объяснение:
Graceful Degradation (Плавная деградация) — это архитектурный принцип проектирования отказоустойчивых систем. Его цель — максимально сохранить пользовательский опыт и работоспособность ядра системы, даже когд а некоторые её части выходят из строя.
Почему это не просто «работать несмотря ни на что»?
Ключевая мысль — приоритизация. Система должна понимать, какие сервисы критичны для её основной функции, а какие — дополняют её.
Конкретные примеры для аналитика:
1. Интернет-магазин:
* Критичный сервис: Корзина, оформление заказа, платежный шлюз. Без них система не работает.
* Некритичный сервис: Рекомендательный движок («Похожие товары»), сервис отзывов, виджет прогноза доставки.
* Поведение при деградации: Если упал рекомендательный сервис, страница товара должна загрузиться, просто блок «С этим товаром покупают» будет пустым или покажет заглушку. Пользователь все равно сможет положить товар в корзину и купить его.
2. Мобильное приложение соцсети:
* Некритичный сервис: Сервис для загрузки аватарок в высоком разрешении.
* Поведение при деградации: Если сервис аватарок недоступен, приложение покажет аватарки из низкокачественного кэша или стандартную иконку, но лента новостей будет продолжать работать.
Как это связано с требованиями?
Системный аналитик должен:
* Выявить и классифицировать зависимости: Составить матрицу зависимостей системы и отметить, какие из них критичны для бизнес-целей.
* Сформулировать нефункциональные требования: «При недоступности сервиса рекомендаций в течение более 5 секунд, система должна отображать основной контент страницы, скрыв блок рекомендаций, и залогировать инцидент».
* Продумать сценарии отказов: В сценариях использования (use case) описывать не только happy path, но и ветки поведения при недоступности тех или иных служб.
№4613 категория вопросов: #INTEGRATION
👩‍🏫Объяснение:
Point-to-Point (P2P) — это наивный подход к интеграции, при котором каждая система взаимодействует с другой напрямую, по собственному, уникальному для каждой пары протоколу и формату данных.
Почему это становится проблемой?
Формула количества потенциальных связей для N систем: N * (N-1) / 2. Для 5 систем это 10 связей, для 10 систем — уже 45, для 20 — 190 связей. Каждая связь — это:
* Отдельный коннектор/адаптер.
* Свой формат сообщений (XML, JSON, CSV, фиксированная длина).
* Свой протокол (HTTP, FTP, JDBC, сокеты).
* Своя логика обработки ошибок и повторных попыток.
Конкретные последствия для бизнеса и разработки:
1. Неподдерживаемость: Чтобы изменить формат данных в одной системе, нужно найти и обновить все системы, которые с ней взаимодействуют. Это долго, дорого и чревато ошибками.
2. Отсутствие контроля и видимости: Нет единой точки, через которую проходят все данные. Невозможно централизованно применять политики безопасности, логировать все сообщения, отслеживать производительность интеграций или внедрить сквозную трассировку транзакций.
3. Сложность тестирования: Чтобы протестировать изменение в одной системе, нужно поднимать и настраивать все системы, от которых она зависит и которые от неё зависят.
4. Риск возникновения «тихой» поломки: Система A изменила поле в сообщении для системы B. Система C, которая тоже читает это сообщение (но об этом забыли), ломается, потому что не ожидает нового формата.
Альтернативы, которые должен знать аналитик:
* Интеграционная шина (ESB): Централизованный посредник, который берет на себя трансформацию и маршрутизацию данных.
* Шина событий (Event Bus): Системы публикуют события в общую шину, а подписчики получают их, не зная об отправителе (слабая связанность).
* API Gateway: Унифицированный вход для внешних клиентов.
Роль аналитика: Выявлять подобные хаотичные связи на ранних этапах анализа существующей архитектуры (as-is) и предлагать в целевом состоянии (to-be) консолидацию интеграций через стандартизированные интерфейсы и централизованные узлы.
№4614 категория вопросов: #INTEGRATION
👩‍🏫Объяснение:
Dead Letter Queue (DLQ) — это не просто «мусорная корзина», а важнейший инструмент обеспечения надежности и наблюдаемости в асинхронных системах.
Как работает типичный сценарий с DLQ:
1. Получение сообщения: Сервис-получатель (консьюмер) берет сообщение из основной очереди.
2. Ошибка обработки: Сообщение не может быть обработано. Причины:
* Ошибка в данных: Неверный формат, отсутствует обязательное поле, ссылка на несуществующую сущность (например, order_id=999999).
* Ошибка в бизнес-логике: Нарушение инварианта (например, попытка отгрузить товар с отрицательным остатком).
* Внешняя недоступность: Сервис-получатель зависит от другой системы (БД, API), которая временно недоступна.
3. Повторные попытки (Retry): Консьюмер не удаляет сообщение сразу. Он помечает его как необработанное и возвращает в очередь (или откладывает). Сообщение будет предпринято несколько попыток (например, 3 или 5) с интервалом.
4. Помещение в DLQ: Если после всех попыток сообщение все еще не может быть обработано, брокер (например, RabbitMQ, AWS SQS) автоматически перемещает его в специальную очередь — Dead Letter Queue.
Зачем это нужно? Без DLQ было бы так:
* «Отравленное» сообщение вечно циркулировало бы в основной очереди, постоянно вызывая ошибки и загружая логи.
* Оно могло бы блокировать обработку других, корректных сообщений, стоящих за ним в очереди (в FIFO-очередях).
* Невозможно было бы выявить систематическую ошибку в данных или коде без ручного поиска в логах.
Практическое применение DLQ:
1. Изоляция проблемы: Основная очередь очищается от битого сообщения и продолжает нормально работать.
2. Аварийное оповещение: Факт попадания сообщения в DLQ — это триггер для отправки алерта команде разработки или поддержки (CRITICAL: Сообщения падают в DLQ!).
3. Анализ и отладка: Инженер может вручную взять сообщение из DLQ, изучить его содержимое, понять причину сбоя (валидация, баг, проблема во внешней системе).
4. Восстановление (Replay): После того как причина устранена (баг исправлен, данные подправлены), сообщения из DLQ можно вернуть в основную очередь для повторной, уже успешной, обработки.
Роль системного аналитика: При проектировании интеграций через очереди требовать настройки DLQ и прописывать в требованиях процесс реагирования на попадание туда сообщений (мониторинг, алертинг, процедуры анализа).
№4615 категория вопросов: #INTEGRATION