Какие особенности тестирования распределённых микросервисов вы считаете ключевыми?
Middle
В микросервисах основной риск — ошибки на стыках сервисов и рассинхрон данных.
Поэтому я делаю упор на интеграционные и договорные проверки, а также наблюдаемость через журналы и метрики.
Из практики: единичные сервисы часто «зелёные», а сценарий целиком ломается между ними.
Частые ошибки
Игнорирование network failures в тестах.
Слишком много E2E тестов.
Дополнительные вопросы
Как тестируете eventual consistency?
Опыт с distributed tracing?
В чём разница между монолитной и микросервисной архитектурой?
Middle
Монолит — единое приложение, где все модули связаны и деплоятся вместе. Проще в разработке и тестировании на старте, но сложнее масштабировать и изменять без риска регрессии.
Микросервисы — набор независимых сервисов с чёткими API-контрактами. Масштабируются и деплоятся независимо, но сложнее в тестировании: больше интеграционных точек, распределённые транзакции, сетевые сбои.
Из практики: переход от монолита к микросервисам обычно увеличивает количество интеграционных дефектов — важно заранее усилить контрактное и интеграционное тестирование.
Частые ошибки
Считают микросервисы «серебряной пулей» и дробят систему неоправданно, усложняя её без достаточных преимуществ.
Монолит ошибочно воспринимают как устаревший всегда плохой подход, хотя для малого проекта монолит проще и надёжнее в управлении.
Дополнительные вопросы
Как тестирование отличается в микросервисной архитектуре vs монолит?
Можно ли постепенно мигрировать монолит на микросервисы? С чего начать?
Как вы применяете chaos engineering и fault injection в тестировании?
Senior
Проверки отказоустойчивости нужны, чтобы понять, как система ведёт себя при сбоях зависимостей.
Я моделирую частичные отказы, задержки и недоступность сервисов, а потом смотрю деградацию и восстановление.
Из практики: такие проверки заранее показывают слабые места, которые обычный регресс не ловит.
Частые ошибки
Chaos без monitoring и alerting.
Отсутствие hypothesis и success criteria.
Дополнительные вопросы
Опыт с chaos тестирование?
Как измеряете system resilience?
Как вы тестируете микросервисную архитектуру?
Senior
Тестирование микросервисов — это прежде всего проверка взаимодействия сервисов, а не каждого сервиса отдельно.
Я делаю упор на договоры, интеграционные сценарии и корректную обработку сбоев зависимостей.
Из практики: самые сложные дефекты почти всегда живут на стыках сервисов.
Частые ошибки
Избыточное E2E тестирование.
Игнорирование контрактного тестирования.
Недостаточное внимание к отказоустойчивости.
Дополнительные вопросы
Как тестируете асинхронные взаимодействия?
Стратегии для distributed tracing?
Что такое монолит, модульный монолит и микросервисы? Плюсы и минусы каждого?
Middle
Монолит — единое приложение, одна кодовая база и один процесс деплоя. Просто запускать, проще транзакции, низкие операционные расходы. Минусы: тяжело масштабировать частями, рост сложности с размером, длинные релизы.
Модульный монолит — монолит с чёткими модулями, чьи границы соблюдены в коде. Сохраняет простоту деплоя, но даёт изолируемость. Лучший выбор для команд до 30–50 человек.
Микросервисы — много мелких независимых сервисов с собственными БД и релизами. Плюсы: независимые команды, разные технологии, точечное масштабирование. Минусы: распределённая сложность (сеть, согласованность, мониторинг), высокий порог входа.
Частые ошибки
Дробят монолит на микросервисы преждевременно — получают «распределённый монолит».
Считают модульный монолит «переходным» — он самодостаточен.
Дополнительные вопросы
Когда оправдан переход с монолита на микросервисы?
Что такое distributed monolith?
Что такое SOA и чем отличается от микросервисов?
Middle
SOA (Service-Oriented Architecture) — стиль, где система разбита на крупные сервисы, связанные через корпоративную шину (ESB), обычно по SOAP/WS-*. Сервисы реюзаются между приложениями.
Микросервисы — эволюция SOA. Сервисы мельче, у каждого своя БД, без ESB (общение через REST/gRPC/события), децентрализованное управление, независимый деплой.
Из практики: SOA — про переиспользование крупных сервисов в энтерпрайзе. Микросервисы — про скорость разработки и автономность команд.
Частые ошибки
Называют любые HTTP-сервисы «микросервисами», даже если они монолитно деплоятся.
Считают, что «SOA умерла» — она по-прежнему живёт в энтерпрайзе.
Дополнительные вопросы
Что такое orchestration vs choreography?
Какие принципы у каждого подхода?
Что такое API Gateway? Зачем он нужен?
Middle
API Gateway — единая точка входа для внешних клиентов в систему из множества сервисов. Скрывает внутреннюю топологию, выполняет авторизацию, rate limiting, кэширование, агрегацию, версионирование, преобразование протоколов.
Примеры: Kong, Envoy, AWS API Gateway, NGINX. В микросервисной архитектуре почти обязателен — иначе клиенты должны знать про каждый сервис.
Из практики: API Gateway легко превращается в «свалку логики». Бизнес-логика не должна жить в gateway — только cross-cutting (auth, throttling, маршрутизация).
Частые ошибки
Тянут бизнес-логику в gateway — он становится монолитом.
Делают gateway единой точкой отказа без HA.
Дополнительные вопросы
Чем API Gateway отличается от reverse proxy?
Что такое BFF (Backend for Frontend)?
Что такое Service Discovery?
Middle
Service Discovery — механизм, позволяющий сервисам находить друг друга в динамической среде, где IP/порт могут меняться. Сервисы регистрируются в реестре (Consul, Eureka, etcd), клиенты запрашивают актуальный список инстансов.
Два подхода: client-side discovery (клиент сам смотрит в реестр и выбирает), server-side (балансер делает это за клиента, как в k8s через Service).
Из практики: в Kubernetes service discovery встроен — отдельный реестр обычно не нужен. В legacy-окружениях актуальны Consul/Eureka.
Частые ошибки
Хардкодят URL партнёрских сервисов — в продакшене не масштабируется.
Не настраивают health-check — discovery возвращает мёртвые инстансы.
Дополнительные вопросы
Чем DNS-based discovery отличается от registry-based?
Как работает service mesh (Istio, Linkerd)?
Что такое горизонтальное и вертикальное масштабирование?
Junior
Вертикальное (scale up) — увеличить ресурсы одного сервера (CPU, RAM, диск). Просто, но ограничено железом и обычно сопровождается даунтаймом.
Горизонтальное (scale out) — добавить новые инстансы и распределить нагрузку. Практически без ограничений, отказоустойчиво, но требует stateless-приложения, балансера и репликации данных.
Из практики: для cloud-native приложений по умолчанию выбирают horizontal. БД часто масштабируют вертикально + read-replica горизонтально, потому что распределённая запись сложна.
Частые ошибки
Пытаются масштабировать stateful-приложение горизонтально без репликации.
Полагаются только на вертикальное и упираются в потолок железа.
Дополнительные вопросы
Что такое auto-scaling?
Какие БД легко масштабируются горизонтально?
Что такое балансировщик нагрузки? Какие алгоритмы знаешь?
Junior
Load Balancer — компонент, распределяющий входящие запросы между несколькими инстансами приложения. Может работать на L4 (TCP/UDP) или L7 (HTTP).
Алгоритмы: round-robin (по очереди), least connections (на наименее загруженный), least response time, hash (по IP/токену для sticky), weighted (с учётом мощности). Примеры: NGINX, HAProxy, AWS ELB.
Из практики: round-robin прост, но не учитывает реальную нагрузку. Least connections лучше для разнородных запросов.
Частые ошибки
Используют sticky sessions без необходимости — теряют гибкость балансировки.
Делают LB единой точкой отказа.
Дополнительные вопросы
Что такое L4 и L7 балансировка?
Чем sticky sessions опасны?
Что такое CDN?
Junior
CDN (Content Delivery Network) — географически распределённая сеть кэширующих серверов. Контент (статика, медиа, иногда API-ответы) раздаётся клиенту с ближайшего узла, снижая latency и нагрузку на origin.
Используется для статики (JS/CSS/изображения), видео-стриминга, мобильных приложений. Примеры: Cloudflare, Akamai, AWS CloudFront, Fastly.
Из практики: правильно настроенный CDN ускоряет загрузку сайта в разы и снижает счёт за трафик. Главное — корректные Cache-Control.
Частые ошибки
Кэшируют динамику без понимания инвалидации — пользователи видят чужие данные.
Полагаются на CDN, но не настраивают cache headers — кэш не работает.
Дополнительные вопросы
Что такое edge computing?
Как инвалидировать кэш CDN при релизе?
Что такое event-driven архитектура?
Middle
Event-driven — стиль, где сервисы общаются через события: «что-то произошло». Один сервис публикует событие, другие подписываются и реагируют. Связанность по времени и по данным — слабая.
Плюсы: гибкость, новый потребитель добавляется без изменения источника, естественное масштабирование. Минусы: трудно отслеживать поток (нет линейной цепочки), сложнее отладка, гарантии порядка/доставки требуют внимания.
Из практики: эвент-дривен особенно подходит для аналитики, аудита, fan-out уведомлений. Не подходит, когда нужен синхронный ответ «сделано/не сделано».
Частые ошибки
Делают event-driven «по умолчанию» там, где нужен RPC.
Публикуют события без схемы — потребители ломаются на каждом изменении.
Дополнительные вопросы
Чем event-driven отличается от message-driven?
Что такое event sourcing?
Что такое Saga-паттерн? Когда применяется?
Middle
Saga — паттерн управления длительной распределённой транзакцией через цепочку локальных транзакций в разных сервисах. Если шаг падает — выполняются компенсирующие действия для отката предыдущих шагов.
Два стиля: оркестрация (центральный оркестратор знает последовательность) и хореография (каждый сервис реагирует на события и публикует свои).
Из практики: классический пример — оформление заказа: резерв на складе → списание со счёта → создание доставки. Каждый шаг — своя транзакция, на ошибку — компенсация.
Частые ошибки
Применяют Saga там, где хватит одной БД-транзакции.
Забывают про идемпотентность компенсаций — повторная отмена ломает данные.
Дополнительные вопросы
Что выбрать — оркестрацию или хореографию?
Какие инструменты для Saga знаешь (Camunda, Temporal, AxonIQ)?
Что такое CQRS и Event Sourcing?
Senior
CQRS (Command Query Responsibility Segregation) — разделение моделей записи (command) и чтения (query). У записи свои таблицы/сервисы, у чтения — оптимизированные представления.
Event Sourcing — хранение состояния не как «текущего снимка», а как последовательности событий. Текущее состояние восстанавливается воспроизведением событий. Часто используется вместе с CQRS.
Из практики: оба паттерна оправданы там, где нужен полный аудит, сложная аналитика прошлого, многомодельное чтение. Это серьёзная инфраструктура — для типичных CRUD-приложений overkill.
Частые ошибки
Применяют CQRS к каждой сущности — увеличивают сложность без выгоды.
Думают, что Event Sourcing просто «лог изменений» — он гораздо строже.
Дополнительные вопросы
Что такое snapshot в Event Sourcing?
Можно ли применить CQRS без Event Sourcing?
Что такое идемпотентность на уровне архитектуры распределённой системы?
Middle
На уровне архитектуры — это проектное свойство, что повторное получение того же сообщения или вызов того же endpoint не приводит к повторному эффекту. Реализуется через ключи идемпотентности, уникальные natural keys, проверку версий (optimistic locking), exactly-once-семантику обработки.
Нужна потому, что в распределённой системе ВСЕГДА бывают повторы: сетевые ошибки, retry клиентов, at-least-once гарантии очередей, переподписки потребителей.
Из практики: «спроектировать идемпотентность» = выбрать стратегию ключа и точку дедупликации (БД, кэш, business-logic). Без явного проектирования получим дубли.
Частые ошибки
Полагаются на «потребитель не повторит» — он повторит.
Реализуют идемпотентность только в БД через UNIQUE — пропускают бизнес-логику до этого.