Sincronizando uma Edição de Dados Entre Serviços de Forma Atômica
Fiz uma edição em um nó organizacional na hierarquia de ativos se propagar de forma consistente entre cópias desnormalizadas em sete tabelas e dois serviços, via uma única transação atômica com eventos pós-commit, o trabalho que me tornou a referência do time em sincronização entre serviços.
Contexto
Esta é a experiência que me estabeleceu como a pessoa de referência para consistência de dados entre serviços no meu time, uma reputação que depois carreguei por várias peças relacionadas de trabalho. É evidência forte de que consigo manter uma fronteira de consistência na cabeça entre serviços que não compartilham uma transação, decompor um épico grande em trabalho rastreado e revisável, e raciocinar sobre ordenação de eventos em vez de só "fazer a escrita acontecer".
Isso também me ensinou a enxergar um caso de uso inchado como um cheiro de design: o refactor de acompanhamento, onde desmontei um caso de uso superdimensionado e descobri um bug real de injeção de dependência, é parte do motivo pelo qual isso mudou como penso sobre fronteiras de domínio.
Problema
O produto permite que usuários reorganizem sua hierarquia de ativos: renomear um nó organizacional, editar sua descrição, ou movê-lo para uma posição diferente na árvore. Por performance, dados sobre aquele nó eram desnormalizados, com cópias e referências derivadas vivendo em cerca de sete tabelas, divididas entre dois serviços de backend implantados de forma independente.
Uma única edição de usuário, portanto, tinha que se propagar em muitas escritas coordenadas através de uma fronteira de serviço. Se só algumas dessas escritas chegassem, o produto exibiria dados inconsistentes: um nó com um nome aqui e outro ali, ou preso ao ramo errado da árvore. Não havia uma transação compartilhada abrangendo os dois serviços em que se apoiar.
03Restrições
Decisão
Decompus o épico em uma sequência de subtarefas rastreadas e tratei a garantia de consistência, em vez das escritas individuais, como a coisa que eu realmente estava construindo.
05Trade-offs
Impacto
07Lições Aprendidas
Conhecimento de engenharia reutilizável que levo adiante disso: