Архитектура и микросервисы

23 вопросов

1 Что такое микросервисы?

Подход к архитектуре: приложение как набор небольших независимых сервисов, каждый в своем процессе, с отдельной БД и API. Коммуникация по сети (HTTP, gRPC, очереди). Плюсы: независимое развертывание, масштабирование по сервисам, технологическое разнообразие. Минусы: сложность операций, распределенные отказы, консистентность.

Открыть отдельно →
2 Плюсы и минусы микросервисов?

Плюсы: независимый деплой и масштабирование, технологическая свобода, отказоустойчивость по сервисам. Минусы: сложность операций, распределенные транзакции и отладка, сетевые задержки, дублирование данных и логики.

Открыть отдельно →
3 Когда оставить монолит?

При малой команде, простом домене, необходимости быстрого старта. Монолит проще разрабатывать и деплоить. Микросервисы оправданы при росте команды, разных требованиях к масштабированию и надежности компонентов.

Открыть отдельно →
4 Что такое Strangler Fig?

Постепенная миграция с монолита: новый функционал в сервисах, трафик переводится на них; старый код со временем "обвивается" и заменяется. Снижает риск большого переписывания.

Открыть отдельно →
5 Синхронная vs асинхронная коммуникация сервисов?

Синхронная (HTTP, gRPC): простой запрос-ответ, но связь и каскадные отказы. Асинхронная (очереди, события): развязка, устойчивость к сбоям, eventual consistency. Выбор по требованию к консистентности и задержке.

Открыть отдельно →
6 Что такое Saga?

Паттерн распределенных транзакций: последовательность локальных транзакций с компенсирующими действиями при откате. Choreography (события) или Orchestration (центральный координатор). Нет ACID между сервисами.

Открыть отдельно →
7 Что такое Circuit Breaker?

При повторных сбоях вызова сервиса переключается в "открытое" состояние - вызовы не выполняются, возвращается ошибка. После таймаута - попытка (half-open). Защита от каскадных сбоев и перегрузки.

Открыть отдельно →
8 Что такое Transaction Outbox?

Паттерн надежной доставки: запись бизнес-данных и сообщения в одну БД в одной транзакции (outbox-таблица); отдельный процесс читает outbox и публикует в брокер. Гарантия "ровно один раз" публикации при идемпотентном потребителе.

Открыть отдельно →
9 Что такое Event Sourcing?

Хранение состояния как лога событий; текущее состояние восстанавливается применением событий. Полная история, аудит, воспроизведение. CQRS часто сочетают с event sourcing. Сложность в миграциях и запросах.

Открыть отдельно →
10 Что такое Service Discovery?

Механизм поиска экземпляров сервисов по имени (DNS, Consul, etcd, Kubernetes Services). Клиент не знает IP; получает актуальный список при обращении. Регистрация при старте, снятие при остановке.

Открыть отдельно →
11 Что такое API Gateway?

Единая точка входа: маршрутизация, аутентификация, rate limiting, агрегация ответов. Клиенты обращаются к шлюзу, шлюз - к сервисам. Упрощение клиентов и централизация кросс-срезовых задач.

Открыть отдельно →
12 Что такое BFF?

Backend for Frontend - отдельный слой API под конкретный клиент (веб, мобильное приложение). Агрегирует вызовы к сервисам, адаптирует формат. Уменьшает число запросов и связность клиента с множеством сервисов.

Открыть отдельно →
13 Что такое backpressure?

Обратное давление: при перегрузке потребитель сигнализирует производителю замедлиться или приостановиться. Предотвращение переполнения очередей и падения потребителя. Реализация в реактивных потоках и очередях.

Открыть отдельно →
14 Graceful degradation?

При сбое зависимого сервиса приложение снижает функциональность, но продолжает работать. Кеш, заглушки, отключение не критичных фич. Цель - доступность и приемлемый UX при частичных сбоях.

Открыть отдельно →
15 Retry и exponential backoff?

Повтор запроса при временной ошибке; backoff - увеличение паузы между попытками (например, удвоение). Ограничение числа попыток и максимальной паузы. Jitter для разброса нагрузки. Не ретраить идемпотентные мутации без идемпотентного ключа.

Открыть отдельно →
16 Что такое bulkhead?

Изоляция ресурсов: пулы потоков/соединений разделены по сервисам или по типу запросов. Сбой или перегрузка одного не исчерпывают общий пул. По аналогии с отсеками на корабле.

Открыть отдельно →
17 Correlation ID?

Уникальный идентификатор запроса, передается по всей цепочке вызовов (заголовок, лог). Позволяет связать логи и трейсы одного запроса в разных сервисах. Критично для отладки распределенных систем.

Открыть отдельно →
18 Распространение таймаутов?

Таймауты должны задаваться на каждом уровне (клиент, шлюз, сервис). Каскадные таймауты: общий таймаут запроса распределять по вызовам. Не оставлять бесконечные ожидания - иначе накопление зависших соединений.

Открыть отдельно →
19 Health check в микросервисах?

Endpoint (например, /health) для проверки живости и готовности. Liveness - жив ли процесс; readiness - готов ли принимать трафик (БД, кеш). Оркестратор и балансировщики используют для маршрутизации и рестартов.

Открыть отдельно →
20 Что такое DLQ?

Dead Letter Queue - очередь для сообщений, которые не удалось обработать после N попыток. Анализ, ручная обработка или повторная публикация. Не терять сообщения и не блокировать основную очередь.

Открыть отдельно →
21 Горизонтальное vs вертикальное масштабирование?

Вертикальное - больший сервер (CPU, RAM). Проще, но есть предел и single point of failure. Горизонтальное - больше экземпляров, балансировка. Лучше для отказоустойчивости и роста. Микросервисы ориентированы на горизонтальное.

Открыть отдельно →
22 Назначение load balancer?

Распределение запросов между экземплярами сервиса. Алгоритмы: round-robin, least connections, IP hash. Health checks для исключения нерабочих. Слой 4 (TCP) или уровень 7 (HTTP). Sticky session при необходимости.

Открыть отдельно →
23 ESB vs API Gateway?

ESB (Enterprise Service Bus) - центральный брокер интеграции, трансформации, оркестрация. Тяжелый, монолитный. API Gateway - единая точка входа для API, маршрутизация и кросс-срезовые задачи. Современные системы чаще Gateway и прямая коммуникация сервисов.

Открыть отдельно →
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.