Voltar
Reflexões sobre o Dynamic Consistency Boundary

Dynamic Consistency Boundary em event sourcing: o que ele resolve e onde pode complicar

Aprofundamento CEVIU

Aprofundamento

O Dynamic Consistency Boundary (DCB) foi proposto por Sara Pellegrini e Milan Savic, então engenheiros da Axon, há cerca de três anos. O exemplo clássico é a matrícula de alunos em cursos: o curso tem vagas limitadas e o aluno tem um teto de matrículas. Com um stream por curso e outro por aluno, a decisão precisa de dados dos dois. Sem transação ou append atômico multi-stream, não dá para garantir as duas regras numa só operação.

No DCB, os eventos recebem tags (como student:Oskar e course:Math). O comando seleciona por tipo e tag os eventos de que precisa, decide e faz o append com a condição: falhar se algum evento que case com a consulta tiver sido gravado depois da posição lida. O event store verifica isso de forma atômica. Segundo o autor da análise, Oskar Dudycz (Emmett), a versão original, sem tags, aceitava qualquer consulta sobre eventos passados. Isso esbarra no custo de travar muito mais do que o necessário ou rastrear tudo que cada transação leu. As tags viram um compromisso: o store pré-calcula um índice por tag e tipo de evento.

A crítica central é que tags com cara de identificador de entidade funcionam como streams, só que um evento cai logicamente em vários. Elas precisam existir no momento do append, e retagging é migração. O ganho real do DCB é estreitar conflitos por tipo de evento (o exemplo é StudentEmailChanged não conflitar com a matrícula). O autor diz nunca ter visto conflitos tão frequentes a ponto de virarem problema. Quando viu, era sinal de design ruim. Ele sugere, se for preciso, labels de baixa cardinalidade (como course-enrollment) sobre streams, em vez de tags de alta cardinalidade. Também discute o argumento de que streams acumulam eventos demais: fatos repetidos, eventos artificiais só para subir versão (como SeatNextToWereTaken no exemplo do cinema) e eventos técnicos. Em banco relacional, a versão da linha do stream pode subir sem gravar evento.

Por que isso importa

Para quem modela write side em event sourcing, a leitura é que DCB resolve bem um problema técnico de contenção, mas não substitui o trabalho de modelagem. Se o event store já oferece append multi-stream transacional, vale começar por ele e só migrar para DCB se a contenção estreita for comprovada. Para quem pensa em governança e analytics, tags de alta cardinalidade também incham eventos e dificultam agrupar e filtrar por critério.

Perguntas frequentes

O que é Dynamic Consistency Boundary (DCB)?

É um padrão em que cada comando define sua própria fronteira de consistência por uma consulta sobre tipos de evento e tags. O append só falha se surgir, depois da posição lida, um evento que case com essa consulta. A verificação é atômica no event store.

Qual problema o DCB resolve em event sourcing?

Ele permite tomar uma decisão que depende de mais de uma entidade, como curso e aluno, registrando um único evento. Também evita falsos conflitos, já que só eventos relevantes para a consulta causam falha. Em streams tradicionais, qualquer evento novo no mesmo stream derruba o append.

Por que a análise critica as implementações com tags?

Porque as tags precisam ser conhecidas no append, o que fixa as fronteiras de antemão, como streams fazem. Tags como student:Oskar funcionam como identificadores de entidade. Mudanças de schema, retagging e evolução de queries ficam mais difíceis.

Quando preferir transações multi-stream a DCB?

Quando o event store suporta append atômico em vários streams e os conflitos são raros. Nesse caso, carregar os dois streams e checar as versões esperadas numa transação dá o mesmo resultado. A análise recomenda DCB só se uma contenção mais estreita for comprovada.

Fontes

Avalie este artigo:
Categoria
CEVIU Dados
Publicado
22 de outubro de 2026
Editoria
CEVIU Dados

Quer receber mais sobre CEVIU Dados?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser