Files
han-app/VM2_services/documentation/module-04-redis-vm2.md
T

5.5 KiB
Raw Blame History

module-04-vm2. Redis Safety ВМ2 Processing

Статус: целевая спецификация Redis на ВМ2.
Канонический контракт (ключи, TTL, Lua, AOF, ACL, eviction) — arch-09-redis.md.
Redis DB0/DB1 ВМ1 — module-04-redis-vm1.md. Hostname Redis ВМ1 не используется.

1. Назначение и границы

Отдельный instance Redis Safety: hot cache, rate limiting caller и optional worker wake-up. PostgreSQL message_safety.safety_tasks — единственный queue/lease source (FOR UPDATE SKIP LOCKED, fencing generation). Redis не хранит authoritative task state, locks или leases.

bitrix-sync этот Redis не использует. Guest API rate/idempotency/realtime — на ВМ1.

Cache loss/restart безопасно восстанавливается из PostgreSQL; Redis outage не выключает core Safety.

2. URL и ACL

MESSAGE_SAFETY_REDIS_URL=redis://message_safety:<secret>@redis:6379/0

Только на ВМ2. Credential доставляется secret file и не входит в общий .env ВМ1. message_safety ACL: только prefixes han:safety:*. REDIS_URL / REDIS_REALTIME_URL на ВМ2 отсутствуют.

Logical DB index /0 — локальный этой instance, не DB0 ВМ1.

3. Карта ключей

Key Тип/value TTL
han:safety:rl:service:{caller}:{window} counter window+jitter
han:safety:text:{analysis_hash}:{rules_version} hot text-rules result, monitor rule ids без raw text active config, seed ≤48h
han:safety:verdict:{content_hash}:{config_version}:{detector_bundle} hot file verdict cache active config, seed ≤30d
han:safety:link:{url_hash}:{rules_version}:{config_version} stable local policy cache active config, seed ≤48h
han:safety:dns:{host_hash}:{rrtype} DNS answer; classification повторяется под текущей policy actual TTL, active hard max seed 900s
han:safety:wakeup Pub/Sub notification only no storage

Raw message text, file bytes, presigned URL и task/lease documents запрещены.

Legacy v1 stub DB2 живёт на ВМ1 и не создаётся на ВМ2.

4. Lua scripts ВМ2

Обязательные:

  • rate-limit evaluate для han:safety:rl:*;
  • при необходимости — atomic cache set с TTL/version stamp.

Lua safety task get+increment poll на ВМ2 запрещён: poll/lease принадлежат PostgreSQL. NOSCRIPT reload — arch-09 §6.

5. Sizing ВМ2

Redis Safety = hot verdict/link/DNS entries + rate windows + Pub/Sub buffers
total × 1.5 allocator/fragmentation × 1.3 growth reserve

Volume redis-data rebuildable: бизнес-restore из dump не требуется.

6. Degraded behavior ВМ2

При Redis недоступен:

  • production Safety продолжает task claim/poll через PostgreSQL;
  • hot cache/rate/wakeup деградируют и прогреваются после восстановления;
  • Redis hot cache не является core gate /health/ready (capability map module-05 / arch-03);
  • bitrix-sync не деградирует из-за этого Redis.

Restore: поднять пустой или проверенный instance; Safety прогревает cache лениво. Не копировать dump в небезопасное место.

7. Metrics ВМ2

Общие — arch-09 §14 и module-09-observability-vm2.md. Дополнительно: Safety hot-cache hit/miss, DNS TTL cap, wakeup subscribers, rate-limit decisions caller.

8. Тесты ВМ2

  • ACL: message_safety видит только han:safety:*; han:api:* / han:rt:* недоступны;
  • порт 6379 недоступен с host/public network и с ВМ1 Docker DNS;
  • Safety cache loss/rebuild, DNS TTL cap и доказательство отсутствия task/lease state в Redis;
  • rate Lua concurrency;
  • NOSCRIPT reload;
  • all application keys имеют TTL (кроме Pub/Sub channel);
  • max value/invalid serialization; raw text/file не сохраняются;
  • restart with AOF/RDB, corrupted AOF rehearsal, empty restore;
  • Redis outage не останавливает PostgreSQL claim/poll;
  • logs/metrics не содержат secret/value/PII/message text.

9. Definition of Done ВМ2

Дополнительно к arch-09 §15:

  • prefixes han:safety:* реализованы; task/lease keys отсутствуют;
  • cache loss/rebuild и DNS TTL cap доказаны;
  • health/degraded §6 согласованы с capability readiness Safety;
  • dashboards/alerts Redis Safety готовы;
  • MESSAGE_SAFETY_REDIS_URL не появляется в репозитории/Compose ВМ1.

10. TBD ВМ2

  • R1/R2: maxmemory и eviction после load profile Safety.
  • R4: Safety task TTL/recovery margin — в PostgreSQL / module-05-message-safety.md, не в Redis.
  • R3: имя MESSAGE_SAFETY_REDIS_URL — arch-04.

11. Ссылки