-
Notifications
You must be signed in to change notification settings - Fork 2
Persistência
Esta página explica como o Zyra distribui estado entre memória, Redis, MySQL e disco local, e qual o papel de cada camada no runtime.
A estratégia de persistência do Zyra busca equilibrar:
- baixa latência no fluxo online
- durabilidade de histórico e auditoria
- resiliência diante de falhas parciais
- recuperação de consistência ao longo do tempo
- Memória
- Redis (opcional)
- MySQL
- Disco local
Cada camada resolve um problema diferente.
Auth não é a mesma coisa que store operacional.
A sessão do WhatsApp usa uma estratégia com prioridade:
- MySQL
- Redis
- Disco local
Se a estratégia centralizada falhar durante o bootstrap, o runtime pode cair para o fallback local em disco para manter disponibilidade.
Artefatos envolvidos:
auth_credssignal_keysWA_AUTH_DIR- persistência de credenciais e debounce de
creds.update
Além de armazenar credenciais, auth_creds também participa da descoberta de startup: sem WA_CONNECTION_IDS, o bootstrap pode consultar o MySQL para decidir quais connection_id devem subir.
A memória é o primeiro hot path do sistema.
Ela mantém estruturas recentes para:
- chats
- contatos
- grupos
- mensagens
- mapeamentos LID/PN
- caches auxiliares do Baileys
Vantagens:
- latência mínima
- suporte ao fluxo online
- menos round-trips ao backend de persistência
Limite importante:
-
WA_MAX_CACHED_MESSAGEScontrola o volume do cache de mensagens em memória
Redis atua como cache distribuído e camada de aceleração, não como substituto do histórico durável.
Usos típicos:
- hot cache para store
- aceleração de leituras recentes
- apoio à estratégia de auth quando configurado
- persistência compartilhada mais rápida que disco local
Pontos importantes:
- falhas de Redis não devem impedir completamente a operação SQL
- o namespace é segregado por conexão
- Redis melhora performance, mas não substitui auditoria durável
MySQL é a fonte de verdade operacional do Zyra.
Ele armazena:
- mensagens e mídia
- eventos e falhas
- comandos executados
- grupos, participantes e chats
- identidade unificada de usuários
- labels, blocklist e newsletters
- checkpoints do backfill
O SQL store usa um padrão importante:
- persiste o payload bruto
- grava colunas derivadas e relacionais para consulta eficiente
Isso torna o sistema simultaneamente auditável e utilizável para suporte, analytics e reconciliação.
O disco local é usado principalmente para:
- fallback de credenciais quando necessário
- persistência local de mídia baixada
- dados auxiliares de estado em alguns cenários
Exemplos:
WA_AUTH_DIRWA_MEDIA_DOWNLOAD_DIR- mídia com
WA_MEDIA_AUTO_DOWNLOAD=true
O runtime grava mensagens de forma incremental, com suporte a:
- payload serializado
- preview textual
- indexação em
message_text_index - relacionamento entre sender, quoted, mentioned e participant
- eventos associados à mensagem
Quando habilitada:
- metadados de mídia são gravados em
message_media - a mídia pode ser baixada para disco local
- o backfill pode completar
file_lengthefile_namedepois
O Zyra trata identidade como problema central.
A camada SQL/Store reconcilia:
- JID
- PN
- LID
- aliases visíveis
- devices
Essa reconciliação é crítica para:
- auditoria confiável
- relatórios
- rastreio de ações administrativas
- consistência de mensagens e participantes
A configuração operacional de grupo, como antilink, é tratada como estado persistente próprio.
Ela pode passar por:
- cache local
- Redis
- MySQL (
group_config)
Isso permite evolução de flags sem churn excessivo de schema.
Nem toda relação derivada precisa estar perfeita no mesmo instante da escrita online.
O desenho aceita consistência eventual em alguns pontos e usa o worker de backfill para:
- preencher campos derivados faltantes
- reconciliar vínculos de identidade
- corrigir lacunas históricas
- completar metadados locais de mídia
- isolamento por
connection_id - durabilidade de histórico e auditoria no MySQL
- tolerância razoável a falhas parciais em cache
- recuperação incremental via backfill
Zyra Wiki • Última atualização: 17/05/2026
Zyra Wiki • Última atualização: 17/05/2026
Home | Configuração | Comandos | Banco-de-Dados | Produção | Troubleshooting