GH GambleHub

Núcleo Event-Driven

O que é o núcleo Event-Driven

O núcleo Event-Driven (EDC) é uma «espinha dorsal» da arquitetura, onde os fatos de negócios são registrados e distribuídos como eventos imutáveis, enquanto o resto da funcionalidade (leitura, integração, análise, cachê, notificação) é construído acima do fluxo desses eventos. O núcleo especifica o contrato de eventos, as regras de entrega e os invariantes de ordem/idempotação, garantindo a conectividade e a escalabilidade fracas.

A ideia chave é primeiro gravar um fato (núcleo) e depois enriquecê-lo e projetá-lo de forma independente nos modelos desejados. Isso reduz a conectividade e aumenta a resistência a falhas parciais.

Metas e propriedades EDC

A verdade dos factos é que cada evento é uma gravação imutável de «o que aconteceu».
Conectividade fraca: os produtores desconhecem os consumidores; extensão do sistema - adição de assinantes.
Escala: crescimento horizontal em partituras/topics, consumidores independentes.
Observação e auditoria: identificadores de passagem, reprodutividade, reticências e reaproximação.
Evolução controlada: versões de esquema, compatibilidade, deprecação.

Componentes arquitetônicos

1. Pneu/corretor de eventos: Kafka/NATS/Pulsar/SNS + SQS - canais, partitações, reticências.
2. Registro de esquemas: JSON Schema/Avro/Protobuf para compatibilidade e evolução.
3. Outbox/CDC: atômico do fato + publicação sem «dupla gravação».
4. Projeções/leitura (CQRS): visualizações materializadas para consultas rápidas.
5. Sagas/Orquestra: coordenação de processos de longa duração através de eventos/equipes.
6. Enriquecimento: topics individuais '.enriched '/' .derived' sem afetar o caminho crítico.
7. Traçado, logs, métricas por evento e laje.

Modelo de evento

Tipos de evento

Domain Events: factos de negócios ('payment. authorized`, `kyc. approved`).
Integration Events: Focado em sistemas externos (estáveis, lentamente mudam).
Mudar Data Capture (CDC): alterações técnicas de gravação (use para migrações/integrações).
Auditoria/Telemetry: acções, segurança, SLA.

Atributos obrigatórios (núcleo)

json
{
"event_id": "uuid",
"event_type": "payment. authorized. v1",
"occurred_at": "2025-10-31T11:34:52Z",
"producer": "payments-service",
"subject": { "type": "payment", "id": "pay_123" },
"payload": { "amount": 1000, "currency": "EUR", "method": "card" },
"schema_version": 1,
"trace_id": "abc123",
"partition_key": "pay_123"
}

Recomendações: 'event _ id' é único globalmente; 'partition _ key' define a ordem da entidade; 'trace _ id' fornece correlação.

Semântica de entrega e idimpotência

At-least-once (padrão de muitos corretores): Os consumidores são obrigados a ser idimpotentes.
At-se-once: aceitável apenas para telemetrias secundárias.
Exactly-once: Alcançado no nível de fluxo e armazenamento através de transações/chaves/leitos idumpotentes (mais caro, necessário uma boa razão).

Modelo de Idempotação do Consumidor

Tabela de dados por 'event _ id '/' (event _ id, consumer _ id)' s TTL ≥ retenção do topic.
Upsert em vez de insert; versionagem de projeções por 'sequence '/' accurred _ at'.
Transações de transação: «viu» + alteração de estado.

Ordem e partilha

Ordem garantida dentro da partição.
Selecione 'partition _ key' para garantir que todos os eventos de uma unidade de entidade estejam na mesma partição ('user _ id', 'payment _ id').
Evite «chaves quentes»: hash com sal/baixo-chaves, se necessário para distribuir carga.

Esquemas e evolução

Aditivo-first: novos campos opcionais, proibição de mudança de tipos/semânticos sem versão maior.
Compatibilidade: BACKWARD/FORWARD no registro de esquemas; A CI bloqueia alterações incompatíveis.
Nome: 'domain. action. v{major}` (`payment. authorized. v1`).
Migrações: Publique pares de 'v1' e 'v2' em paralelo, forneça dupla radiação (dual-write via outbox), retire 'v1' após a transição.

Outbox и CDC

Outbox (recomendado para serviços de transação)

1. Em uma transação BD, preserve a gravação de domínio e o evento em outbox.
2. O pabliser de fundo lê o outbox, publica no corretor, marca «enviado».
3. Garantias: Não há «perda» de fato em baixas, não há ressincronização.

CDC (Change Data Capture)

Adequado para sistemas/migrações existentes; a fonte é o logotipo da replicação do banco de dados.
Requer filtragem/transcodificação em eventos de domínio (não transmita «crus» da tabela envolvente).

CQRS e projeções

Os comandos alteram o estado (muitas vezes sincronizado), os eventos formam projeções (asincrona).
As projeções são projetadas para consulta (busca, lista, relatório), atualizadas pelos assinantes.
Ressocialização temporária - normal: mostre um UX sustentável («os dados serão atualizados em alguns segundos»).

Sagas: coordenação de processos

Orquestra, um coordenador envia comandos e aguarda os acontecimentos.
Coreografia: os participantes respondem aos acontecimentos um do outro (simples, mas exigindo disciplina nos contratos).
Regras: compensações claras e horários, passos repetitivos, processadores idumpotentes.

Observabilidade

Trace/Span: Anote 'trace _ id '/' span _ id' através dos cabeçalhos ao gerar eventos.
Métricas: classe de consumidores, velocidade de publicação/consumo, dead-letter rate, proporção de deduções.
DLQ/parking lot: mensagens incompletas - em um top de alert separado; Garanta a readaptação.

Segurança e conformidade

Classificação de dados: o núcleo contém apenas o mínimo de PII/findado necessário (o modelo da pirâmide inversa), e os detalhes, no enriquecimento.
Assinatura/hash de atributos críticos, controle de integridade.
Criptografia in-flight e at-rest, secção de direitos por tópico/consoante (IAM/LCA).
Políticas de reticência e direitos de esquecimento são bem definidos para cada topic.

Desempenho e sustentabilidade

Backpressure: Os consumidores têm limitação de competitividade e os corretores têm quotas/limites.
Batch processamento e compressão: agrupe os registros para reduzir custos gerais.
Retrai com jitter e DLQ em vez de tentativas infinitas.
Resistência Realance: Armazene os offsets transacionalmente/externamente, acelere a partida fria com súmulos.

Modelos de evento típicos

Núcleo de pagamento

`payment. initiated. v1` → `payment. authorized. v1` → `payment. captured. v1` → `payment. settled. v1`

As falhas são 'payment. declined. v1`, `payment. refunded. v1`

Particionamento: 'payment _ id'

SLA: O núcleo de lâmina ≤ 2s p95; a idimpotência dos consumidores é obrigatória.

CUs/verificações

`kyc. started. v1` → `kyc. document. received. v1` → `kyc. approved. v1`/`kyc. rejected. v1`

PII - mínimo; detalhes do documento em 'kyc. enriched. v1 'de acesso restrito.

Auditoria/segurança

`audit. recorded. v1 'com atributos' ator ',' subject ',' action ',' accurred _ at ',' trace _ id '.
Retração/arquivamento contínuo; maior integridade (armazenamento WORM).

Antipattern

Fat Event: payload's sobrecarregado sem necessidade, vazamento de PII.
Hidden RPC através de eventos: espera por respostas sincronizadas «aqui e agora».
CDC crus para fora, estreita conectividade com a base de dados.
Não há idimpotência entre os consumidores: as duplicações produzem duplos efeitos colaterais.
Um topic geral é um conflito de interesses, uma ordem problemática, uma evolução complexa.

Implantação passo a passo da EDC

1. Mapeamento de domínio: selecione as unidades-chave e os ciclos de vida.
2. Catálogo de eventos: nomes, significados, invariantes, campos obrigatórios.
3. Esquema e registro: selecione o formato e inclua as regras de compatibilidade.
4. Outbox/CDC: Para cada produtor, defina o mecanismo de publicação dos fatos.
5. Particionamento: selecione as chaves e avalie as chaves quentes/redesenhar.
6. Idempotidade: modelo de dedução + transacionalidade dos consumidores.
7. Projeções: identifique modelos materializados e atualizações SLA.
8. Traçado, laje, DLQ, alertas.
9. Segurança/PII: classificação de dados, criptografia, LCA.
10. Hyde de evolução: política de versões, deprekate, dual-write para migração.

Folha de cheque de produção

  • Cada evento tem 'event _ id', 'trace _ id', 'accurred _ at', 'partition _ key'.
  • Os esquemas no registro incluem verificações de compatibilidade.
  • A idimpotência dos consumidores foi implementada e testada.
  • Os DLQ/parking lot e alertas foram configurados para erros de publicação/consumo.
  • As projeções são reencaminhadas a partir do logs (replay) com tempo aceitável.
  • Acesso limitado ao PII; payload's mínimo no núcleo.
  • Os SLA são medidos e visíveis em dashboards.
  • Há um plano para migrar versões de eventos e janelas de depredação.

FAQ

O que é que a EDC é diferente de «apenas pneus»?
O núcleo não é apenas um corretor, mas também um contrato de eventos, regras de ordem/idempotação, processos de evolução e observabilidade.

Podemos construir apenas com CDC?
O CDC é adequado para a integração/migração, mas os eventos de domínio expressam mais claramente o significado e sobrevivem mais às mudanças do banco de dados.

E a coerência?
Aceitamos o evolutivo consistency e projetamos OX/processos por baixo (indicadores de atualização, retraí, compensação).

Quando é preciso exactly-once?
Raramente, quando dobrar é totalmente inaceitável e impossível de compensar. Mais frequentemente, basta at-least-once + idempotidade.

Resultado

O núcleo Event-Driven transforma o fluxo de factos de negócios em fundações confiáveis do sistema. Os contratos de eventos claros, a disciplina de entrega e a observabilidade oferecem escalabilidade, resiliência e velocidade de evolução - sem as frágeis conexões sincronizadas e «tempestade» de regressão em mudanças.

Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.