Розділ 17 · 26 питань

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

26 питань і відповідей у розділі Мікросервіси.

Ukrainian Мікросервіси Вихідний 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 (Тестування) → Q26 (Оркестрація)

🎓 Шпаргалка: що знати для кожного рівня

🟢 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
  • 🎯 Шпаргалка для співбесіди — ключові тези, часті питання, червоні прапорці, пов’язані теми