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
- architecture-weekly.comfonte original
- Categoria
- CEVIU Dados
- Publicado
- 22 de outubro de 2026
- Editoria
- CEVIU Dados

