← [Раздел](README.md) · [Главная](../README.md)

# Кейсы из практики

## Цель

Разобрать **типовые производственные ситуации** глазами архитектора: что пошло не так, какие сигналы пропустили, какие решения сработали — в учебной форме без привязки к реальным компаниям и секретам.

## Предварительно

- Разделы **07–11** и [практикум](../12-praktikum/README.md)
- [Миграции и эволюция](migracii-i-evoluciya.md)

## Время

~90 минут

---

## Как читать кейсы

Каждый кейс:

1. **Контекст** — масштаб, стек (обобщённо).
2. **Симптом** — что увидели пользователи / бизнес.
3. **Корневая причина** — 5 Whys.
4. **Архитектурный урок** — что закладывать заранее.
5. **Action items** — конкретные меры.

Имена доменов вымышленные: `shop.example.com`, `pay.example.com`.

---

## Кейс 1 — «Чёрная пятница»

### Контекст

Монолит на 3 pod, PostgreSQL single-AZ, без HPA. Ожидали 200 RPS, пришло 800.

### Симптом

p95 вырос с 200 ms до 15 s, 15% ошибок 503, корзина «пустая».

### Корневая причина

1. Connection pool исчерпан (max 20 на pod).
2. CPU throttling — limits занижены.
3. Redis для сессий single instance, CPU 100%.

### Уроки

| Проблема | Профилактика |
|----------|--------------|
| Нет load test | NFR + k6 до сезона |
| Pool size не в модели | Метрика saturation pool |
| Нет HPA | CPU + custom RPS |
| Single-AZ Redis | Replica + failover |

### Action items

- Soak test 2× ожидаемого RPS.
- Dashboard saturation (DB, Redis, pool).
- Runbook «scale emergency» с лимитами cost.

---

## Кейс 2 — Каскад после деплоя payment

### Контекст

Микросервисы: order → payment → bank API. Новый timeout payment 30 s (было 3 s).

### Симптом

Через 20 мин после деплоя все сервисы 503, restart не помогает.

### Корневая причина

Потоки order-api заблокированы ожиданием payment; retry без jitter усилил нагрузку; circuit breaker не был настроен.

### Уроки

См. [circuit-breaker-i-retry.md](../07-nadezhnost/circuit-breaker-i-retry.md):

- deadline на весь запрос;
- bulkhead pools;
- canary deploy на payment.

### Action items

- Integration test «payment slow 10s».
- Default timeout policy в platform SDK.
- Postmortem → fitness function «max timeout 5s».

---

## Кейс 3 — Утечка PII в логах

### Контекст

JSON-логи в central store, доступ у всей инженерии.

### Симптом

Аудит: email и телефон в поле `request_body` на login.

### Корневая причина

Middleware логировал body целиком; NFR-S04 не было; нет log scrubber.

### Уроки

- Schema логов в code review.
- Автотест: запрещённые поля не появляются.
- RBAC на log store; retention по классу данных.

### Action items

- gitleaks-style для логов (policy).
- Маскирование на ingest.
- Обучение команды GDPR/152-ФЗ basics.

---

## Кейс 4 — Split монолита «за квартал»

### Контекст

CEO: «6 микросервисов за 3 месяца». Shared DB осталась.

### Симптом

6 репозиториев, деплой «поездом», баги на границах таблиц, velocity упала.

### Корневая причина

Distributed monolith; нет database per service; нет contract tests.

### Уроки

[monolit-vs-microservices.md](../11-patterns/monolit-vs-microservices.md) — сначала **modular monolith**, strangler по одной вертикали в год.

### Action items

- Pause new services; module boundaries в монолите.
- ADR: критерии следующего split.
- Conway: выделить одну автономную команду на домен.

---

## Кейс 5 — DR «на бумаге»

### Контекст

RTO 4 ч в договоре, бэкапы nightly, multi-region не настроен.

### Симптом

Региональный outage облака 6 часов, заказы не принимались.

### Корневая причина

Бэкапы не тестировали restore; DNS TTL 24 h; секреты только в упавшем регионе.

### Уроки

[rezervirovanie-i-dr.md](../07-nadezhnost/rezervirovanie-i-dr.md) — учения, runbook, согласованный RTO с реальностью.

### Action items

- Quarterly restore drill.
- Warm standby в region-b.
- Status page + comms template.

---

## Сводная таблица

| Кейс | Главный smell | Раздел курса |
|------|---------------|--------------|
| Black Friday | Нет capacity planning | 09 load |
| Payment cascade | Нет resilience | 07 |
| PII logs | Security NFR | 08 |
| Fast split | Distributed monolith | 11 |
| DR paper | Нет учений | 07 |

---

## Упражнение

Выберите один кейс. Напишите в `LAB-JOURNAL.md`:

- что бы вы сделали на **неделе 1** архитектора в этой компании;
- один ADR заголовком;
- одну метрику алерта.

---

## Самопроверка

1. Какие три причины outage в кейсе Black Friday?
2. Как retry усугубил инцидент с payment?
3. Почему shared DB ломает split на микросервисы?
4. Что должно быть в DR кроме «бэкап включён»?

---

## Дальше

Курс **ArchitectCloudApp** (разделы 07–13) завершён. Вернитесь к [главной](../README.md) или опубликуйте артефакты: `make upload-docs` в [SETUP.md](../SETUP.md).

← [Миграции и эволюция](migracii-i-evoluciya.md)
