Staging: деплой и синхронизация
TL;DR
Staging — это предпрод среда с максимальным паритетом продакшна, где проверяются контракты, миграции, конфиги, вебхуки и цепочки выплат на анонимизированных данных и симуляторах. Успех дают: immutable-деплой (blue/green), data-parity без PII, schema-registry, shadow-трафик, canary-план, фича-флаги, четкие gates и авто-rollback.
1) Роль staging и паритет с продом
Цель: подтвердить, что релиз безопасен для денег и игроков: схемы БД, миги, конфиги, лимиты, вебхуки, маршрутизация, observability.
Паритет: те же образы, та же топология (ingress/gateway, mesh, очереди, кэши, БД-движки, версии ядра/драйверов), те же policy (auth/rate/circuit).
Отличия: данные обезличены, интеракции с внешними поставщиками — через sandbox/симуляторы, DNS/домены и секреты — отдельные.
2) Топология и доступ
Домены: `staging.api.example.com`, `staging.ws.example.com`.
Изоляция: отдельные VPC/кластер, независимые секреты (KMS/Vault), mTLS внутри.
Доступ: SSO + RBAC (roles: `release-manager`, `qa`, `dev`, `partner-view`), временные токены, аудит входов.
3) Конвейер деплоя (release train)
1. Build (tag, SBOM, сигнатуры артефактов).
2. Tests (unit/integration/contract, security linters).
3. Pack/Scan (SAST/DAST, vuln-gates).
4. Deploy to Staging (immutable, blue/green или rolling с контролем p95/p99).
5. Staging Gates (см. §10).
6. Canary Prod (1→5→25→50→100%).
7. Auto-rollback при нарушении SLO/ошибках.
4) Синхронизация конфигураций
GitOps: все конфиги и политики в Git; единые чарты/манифесты для prod/staging с `values.staging.yaml`.
Parity-контроль: запрещены «ручные правки» в staging. Drift выявляется автоматикой (policy-diff, kube-diff).
Secrets: отдельные ключи и токены; ротация независимо от прод.
5) Схемы: API/БД/ивенты
Единый registry: OpenAPI, Protobuf descriptors, GraphQL SDL, событийн. словарь.
Breaking-checks в CI: запрет разрушающих изменений.
Миграции БД: `up` на staging перед промоушеном; возможность `down`/reversible; dry-run с snapshot-оценкой времени.
Event-совместимость: «двойная запись» (старый+новый формат) при переходах.
6) Данные и синхронизация
Источник: регулярный dump из прод → анонимизация/токенизация/маскирование → импорт в staging.
PII/PAN/KYC документы: удалены/заменены синтетикой; суммы и частоты — искажены (noise) для приватности.
Синхро-окна: план/крон (например, каждую ночь), мониторинг длительности и ошибок.
Идентификаторы: сохраняйте плотность и кардинальность (для реалистики нагрузочных тестов).
7) Внешние интеграции (PSP/KYC/провайдеры)
Sandbox-учетки или симуляторы с HMAC-вебхуками, ретраями, идемпотентностью.
Развилка по флагу: реальный sandbox поставщика или наш симулятор (переключатель в конфиге).
Webhooks: на staging включены подписи, окно времени, DLQ/replay-консоль.
Платежные рельсы: реальные payout/auth на staging запрещены на уровне кода (hard block).
8) Shadow-трафик и реплеи
Shadowing: копируем подмножество прод-чтений в staging (без побочных эффектов), сравниваем ответы/латентность.
Traffic mirroring: ≥ 1–5% GET/статусов. Мутации shadow-не допускаются.
Synthetic replay: прогон исторических трасс (masked) для регресса.
9) Фича-флаги, freeze и совместимость
Флаги управляют поведением без redeploy; конфиги флагов — версионируемые.
Release freeze на период крупного события/нагрузки; staging фиксируется в «зеркале» прод.
Back/forward совместимость: сначала чтение нового формата, затем запись.
10) Gates: что проверяем перед промоушеном
SLO: p95/p99 latency, error-rate, saturations в коридоре.
Contract: API diff — без breaking; вебхуки подписаны, идемпотентность ок.
DB миграции: время в бюджете, нет блокировок «долгоиграющих» таблиц, plan-анализ.
Payments/KYC: позитив/негатив кейсы прошли, ретраи вебхуков → 2xx < 3 c p95.
Rate/quotas: корректные 429/Retry-After.
Security: уязвимости ниже порога; секреты/permissions валидны.
Docs/SDK: OpenAPI/SDL/Proto опубликованы в registry; Postman/SDK обновлены.
Runbooks: плейбуки и rollback-план проверены.
11) Наблюдаемость и алерты
Метрики: RPS, p50/p95/p99, 4xx/5xx, open circuits, queue len, cache hit, webhook delivery.
Трейсы: сквозная корреляция `trace_id`; сравнение с прод (разница латентности).
Логи: маскирование, сэмплирование, «тихие» ошибки (WARN spikes).
Дашборды staging: отдельные, но идентичные по структуре прод; зеленые/красные SLO-полосы.
12) Деплой стратегии
Blue/Green на staging (предпочтительно): быстрый свитч, легкий rollback.
Rolling с маленькими батчами и health-проверками.
Canary внутри staging: процентный трафик между `staging-a` и `staging-b` для A/B профилирования.
DB миграции: zero-downtime паттерны (expand→migrate→contract), «двойная запись», блок-поиск.
13) Безопасность и комплаенс
mTLS, WAF, DDoS-профиль активны.
RBAC/ABAC на эндпоинты админок; запрет интеграторов к внутренним панелям.
Сроки логов короче прод; отчеты аудита релизов сохраняются.
Проверка ключей/сертов: отдельные JWKS/серты, ротации тестируются на staging.
14) Плейбуки инцидентов (staging)
Провал SLO после миграции: откат на `green`, откат схемы (если возможен), включение деградации (обрез «дорогих» агрегатов).
Всплеск 5xx: открыть circuit-breaker к хрупкому апстриму, поднять backoff на BFF, включить кэш.
Утечка PII в staging: немедленная очистка дампов, отзыв секретов, аудит доступов, фиксация политики маскирования.
Запрет вебхуков: временно перевод в dead-letter, ручной replay после фикса.
15) Чек-листы
15.1 Promotion в прод
- Все gates (§10) пройдены; отчет прикреплен.
- Canary-план и критерии стопа определены.
- Фича-флаги подготовлены (вкл/выкл/градации).
- Документация/SDK/портал обновлены.
- Стейкхолдеры уведомлены, окна поддержки согласованы.
15.2 Rollback
- Blue/Green: трафик на предыдущий слот, конфиги откатились.
- Схемы: обратимые или «флаг-деградация» до безопасного состояния.
- Пост-мортем шаблон и сбор артефактов.
16) Мини-сниппеты
GitOps promotion (псевдо)
yaml stages:
- deploy-staging
- verify-gates
- promote-prod deploy-staging:
script: kubectl apply -f k8s/overlays/staging verify-gates:
script:./scripts/check_slo. sh &&./scripts/check_contracts. sh promote-prod:
when: on_success script: kubectl apply -f k8s/overlays/prod
Expand→Migrate→Contract (DDL)
sql
-- expand
ALTER TABLE payouts ADD COLUMN note TEXT NULL;
-- migrate (background job copies data)
-- contract
ALTER TABLE payouts DROP COLUMN comment;
Shadow header (маркировка запросов)
X-Shadow-Trace: 1
Идемпотентность мутаций на staging
pseudo if store. has(idempotency_key) return store. get(idempotency_key)
res = do()
store. set(idempotency_key,res,ttl=72h)
return res
17) Антипаттерны
Staging «почти как прод», но с иными лимитами/фильтрами → ложноположительные результаты.
Реальные PAN/доки в staging.
Ручные «горячие» правки конфигов.
Миграции без оценки времени и блокировок.
Нет shadow-трафика/реплеев — баги всплывают только в проде.
Promotion без rollback-плана.
18) SLO для staging (ориентиры)
Uptime: ≥ 99.5% (витрина интеграций не должна падать).
Latency добавка к прод: ≤ +10–20%.
Webhooks p95: ≤ 3 c до 2xx с ретраями.
Error budget: 5xx шлюза ≤ 0.1% на релиз-окно.
Доля shadow check-ов: ≥ 1% чтений.
Резюме
Staging — это не «песок», а реальная репетиция продакшна: тот же стек и политики, анонимные данные, симуляторы рельс, тени прод-трафика, строгие gates и мгновенный rollback. Заворачивайте все в GitOps + registry схем + immutable деплой, держите фича-флаги и canary-план, и ваши релизы станут предсказуемыми, а инциденты — редкими и управляемыми.