5.5 KiB
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;
NOSCRIPTreload;- 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. Ссылки
- Контракт:
arch-09-redis.md. - ВМ1:
module-04-redis-vm1.md. - Указатель:
module-04-redis.md. - Safety:
module-05-message-safety.md.