Раздел 17 · 26 вопросов

Микросервисы

26 вопросов и ответов в разделе Микросервисы.

Russian Микросервисы Исходный Markdown
Версии по языкам: English Russian Ukrainian

Вопросы этого раздела

  1. Что такое паттерн Saga и когда его использовать
  2. В чём разница между хореографией и оркестрацией в Saga
  3. Как реализовать распределённые транзакции в микросервисах
  4. Что такое компенсирующие транзакции
  5. Что такое паттерн Circuit Breaker
  6. Как работает Circuit Breaker и какие у него состояния
  7. Что такое Service Discovery и зачем он нужен
  8. В чём разница между client-side и server-side discovery
  9. Что такое API Gateway и какие задачи он решает
  10. Что такое шардирование (sharding)
  11. В чём разница между шардированием и партиционированием
  12. Как реализовать горизонтальное масштабирование микросервисов
  13. Что такое паттерн Database per Service
  14. Какие проблемы возникают при использовании общей базы данных
  15. Как организовать коммуникацию между микросервисами
  16. В чём разница между синхронной и асинхронной коммуникацией
  17. Как обеспечить отказоустойчивость микросервисов
  18. Что такое паттерн Bulkhead
  19. Что такое паттерн Retry и как его правильно использовать
  20. Что такое exponential backoff
  21. Как мониторить распределённую систему микросервисов
  22. Что такое distributed tracing
  23. Как реализовать аутентификацию и авторизацию в микросервисах
  24. Что такое паттерн Strangler Fig
  25. Как тестировать микросервисы
  26. Какие инструменты используются для оркестрации микросервисов

Навигатор по разделу

26 вопросов для подготовки к собеседованию на Middle/Senior Java Developer.


📋 Все вопросы

# Вопрос Уровень сложности
1 Что такое паттерн Saga и когда его использовать ⭐⭐⭐
2 В чём разница между хореографией и оркестрацией в Saga ⭐⭐⭐
3 Как реализовать распределённые транзакции ⭐⭐⭐
4 Что такое компенсирующие транзакции ⭐⭐⭐
5 Что такое паттерн Circuit Breaker ⭐⭐
6 Как работает Circuit Breaker и какие у него состояния ⭐⭐
7 Что такое Service Discovery и зачем он нужен ⭐⭐
8 В чём разница между client-side и server-side discovery ⭐⭐
9 Что такое API Gateway и какие задачи он решает ⭐⭐
10 Что такое шардирование (sharding) ⭐⭐⭐
11 В чём разница между шардированием и партиционированием ⭐⭐
12 Как реализовать горизонтальное масштабирование ⭐⭐
13 Что такое паттерн Database per Service ⭐⭐⭐
14 Какие проблемы при использовании общей базы данных ⭐⭐
15 Как организовать коммуникацию между микросервисами ⭐⭐
16 В чём разница между синхронной и асинхронной коммуникацией ⭐⭐
17 Как обеспечить отказоустойчивость микросервисов ⭐⭐⭐
18 Что такое паттерн Bulkhead ⭐⭐
19 Что такое паттерн Retry и как его правильно использовать ⭐⭐
20 Что такое exponential backoff ⭐⭐
21 Как мониторить распределённую систему ⭐⭐⭐
22 Что такое distributed tracing ⭐⭐
23 Как реализовать аутентификацию и авторизацию ⭐⭐⭐
24 Что такое паттерн Strangler Fig ⭐⭐
25 Как тестировать микросервисы ⭐⭐
26 Какие инструменты для оркестрации ⭐⭐⭐

🗺️ Карта зависимостей тем

                    ┌──────────────────────────────────────────┐
                    │   АРХИТЕКТУРА (13-14)                    │
                    │   13. Database per Service               │
                    │   14. Проблемы общей БД                   │
                    └──────────────────┬───────────────────────┘
                                       │
            ┌──────────────────────────┼──────────────────────────┐
            ▼                          ▼                          ▼
    ┌───────────────┐        ┌───────────────┐        ┌────────────────────┐
    │ ТРАНЗАКЦИИ     │        │ КОММУНИКАЦИЯ   │        │ МАСШТАБИРОВАНИЕ    │
    │ (1-4)          │        │ (15-16)        │        │ (10-12)            │
    │ 1. Saga        │        │ 15. Коммуник.  │        │ 10. Sharding       │
    │ 2. Choreo vs   │        │ 16. Sync vs    │        │ 11. Shard vs Part  │
    │    Orchest     │        │     Async      │        │ 12. Horiz. scaling │
    │ 3. Распред.    │        │                │        │                    │
    │    транзак.    │        │                │        │                    │
    │ 4. Компенсир.  │        │                │        │                    │
    └───────┬───────┘        └───────┬───────┘        └────────┬───────────┘
            │                        │                        │
            └────────────────────────┼────────────────────────┘
                                     ▼
                    ┌──────────────────────────────────────────┐
                    │   ОБНАРУЖЕНИЕ И МАРШРУТИЗАЦИЯ (7-9)      │
                    │   7. Service Discovery                   │
                    │   8. Client vs Server                    │
                    │   9. API Gateway                         │
                    └──────────────────────────────────────────┘
                                     │
            ┌────────────────────────┼────────────────────────┐
            ▼                        ▼                        ▼
    ┌───────────────┐        ┌───────────────┐        ┌────────────────────┐
    │ ОТКАЗОУСТОЙЧ.  │        │ МОНИТОРИНГ     │        │ PRACTICES          │
    │ (5-6, 17-20)   │        │ (21-22)        │        │ (23-26)            │
    │ 5. Circuit     │        │ 21. Мониторинг │        │ 23. Auth/Authz     │
    │    Breaker     │        │ 22. Tracing    │        │ 24. Strangler Fig  │
    │ 6. Состояния   │        │                │        │ 25. Тестирование   │
    │ 17. Отказоуст. │        │                │        │ 26. Оркестрация    │
    │ 18. Bulkhead   │        │                │        │                    │
    │ 19. Retry      │        │                │        │                    │
    │ 20. Backoff    │        │                │        │                    │
    └───────────────┘        └───────────────┘        └────────────────────┘

🎯 Рекомендуемый порядок изучения

🟢 Уровень Junior (недели 1-2)

Шаг Тема Файлы Цель
1 Архитектура Q13, Q14 Database per Service, проблемы общей БД
2 Коммуникация Q15, Q16 Sync vs Async, когда что
3 Service Discovery Q7, Q8 Зачем, client vs server
4 API Gateway Q9 Зачем нужен, когда не нужен

🟡 Уровень Middle (недели 3-4)

Шаг Тема Файлы Цель
1 Circuit Breaker Q5, Q6 Состояния, параметры Resilience4j
2 Retry + Backoff Q19, Q20 Exponential backoff, jitter, thundering herd
3 Bulkhead Q18 Thread Pool vs Semaphore
4 Масштабирование Q10, Q11, Q12 Sharding, партиционирование, HPA
5 Monitoring Q21, Q22 Golden signals, distributed tracing

🔴 Уровень Senior (недели 5-6)

Шаг Тема Файлы Цель
1 Saga Q1, Q2 Choreography vs orchestration, compensations
2 Distributed transactions Q3, Q4 Outbox, CDC, compensating transactions
3 Fault tolerance Q17 Комбинация паттернов, cascade failure
4 Auth/Authz Q23 JWT, OAuth2, token validation overhead
5 Strangler Fig Q24 Пошаговая миграка, dual write problem
6 Testing + Orchestration Q25, Q26 Contract tests, Testcontainers, K8s

🔗 Ключевые связи между темами

Тема: Транзакции

Q1 (Saga) → Q2 (Choreography vs Orchestration) → Q3 (Распред. транзакции) → Q4 (Компенсации)

Ключевые связи:

  • Q1 ↔ Q4: Saga использует компенсирующие транзакции для rollback
  • Q2 ↔ Q3: Orchestration = command-driven, Choreography = event-driven
  • Q3 ↔ Q13: Database per Service → нужны распределённые транзакции

Тема: Коммуникация

Q15 (Коммуникация) → Q16 (Sync vs Async)

Тема: Отказоустойчивость

Q5 (Circuit Breaker) → Q6 (Состояния) → Q17 (Отказоустойчивость)
     ↓
Q18 (Bulkhead) → Q19 (Retry) → Q20 (Exponential Backoff)

Ключевые связи:

  • Q5 ↔ Q17: Circuit Breaker — один из 5 паттернов отказоустойчивости
  • Q19 ↔ Q20: Retry использует exponential backoff + jitter для thundering herd
  • Q18 ↔ Q6: Bulkhead ограничивает concurrent calls, Circuit Breaker — по error rate

Тема: Масштабирование

Q10 (Sharding) → Q11 (Shard vs Partition) → Q12 (Horizontal Scaling)

Тема: Monitoring

Q21 (Мониторинг) → Q22 (Distributed Tracing)

Тема: Practices

Q23 (Auth) → Q24 (Strangler Fig) → Q25 (Testing) → Q26 (Orchestration)

🎓 Шпаргалка: что знать для каждого уровня

🟢 Junior

  • Database per Service = каждый сервис имеет свою БД (нет JOIN между сервисами)
  • Sync = HTTP/gRPC (ждём ответ), Async = Kafka/RabbitMQ (fire-and-forget)
  • Service Discovery = механизм нахождения IP сервисов в динамической среде
  • API Gateway = единая точка входа для внешних клиентов

🟡 Middle

  • Circuit Breaker: Closed → Open (при error rate > threshold) → Half-Open (probe)
  • Exponential backoff + jitter предотвращает thundering herd
  • Sharding = разные данные на разных серверах, Partitioning = разделение внутри одной БД
  • Distributed tracing: trace ID → span ID → propagates через HTTP headers
  • Contract testing (Pact) ловит breaking changes в API до production

🔴 Senior

  • Saga: orchestration (центральный контроллер) vs choreography (event-driven)
  • Compensating transaction ≠ rollback — это новая транзакция, делающая противоположное
  • Outbox pattern: запись события в той же транзакции + CDC → Kafka
  • Bulkhead: Thread Pool (полная изоляция) vs Semaphore (легче, но нет изоляции потоков)
  • Strangler Fig: постепенная замена монолита, dual write problem → Outbox/CDC
  • JWT overhead: 200K HMAC/RSA ops при 10K req/s × 20 сервисов

📝 Формат каждого файла

Каждый файл содержит:

  • 🟢 Junior Level — базовое понимание, простые аналогии, примеры
  • 🟡 Middle Level — внутренности, типичные ошибки, практические примеры
  • 🔴 Senior Level — deep dive, edge cases, production experience, monitoring
  • 🎯 Шпаргалка для интервью — ключевые тезисы, частые вопросы, красные флаги, связанные темы