Pular para o conteúdo principal

ADR 0003 — Presença WebSocket em memória

  • Status: Aceite
  • Data: 2026-03

Contexto

O painel e o CRM cliente precisam de “quem está online” com baixa latência. Redis já existe no projeto para cache de branding. Kafka/SQS não fazem parte desta stack (Nest + PostgreSQL + Socket.IO + Redis pontual).

Decisão

Sessões Socket.IO ficam num Map em processo (UserPresenceService). Namespace /presence, salas tenant:<id> e admin:observer. Admins observam sem contar como online.

Redis não é o store de presença. Não há sticky-session documentada: múltiplas réplicas da API não partilham o mapa.

Consequências

  • Positivo: zero round-trip; implementação simples; restart limpa sessões fantasma.
  • Negativo: horizontal scaling de presença exige sticky sessions ou migrar o store (Redis adapter Socket.IO) — ADR futuro se houver mais do que uma réplica ativa.
  • REST: GET /api/v1/presence/* lê o mesmo mapa; um pod A não vê sockets do pod B.