Como lidar com situações, quando o modelo de leitura ficou fora de sincronia com os logs do evento?
-
26-09-2019 - |
Pergunta
Quando os instantâneos de agregados ficaram fora de sincronia com o log de eventos, posso simplesmente reproduzir meus eventos de instantâneos iniciais (que deveriam estar sincronizados). O mesmo que posso fazer quando adicionar/remover novos campos ou quando modifico a lógica dos manipuladores existentes.
Caso eu precise adicionar um novo modelo de leitura (ou seja, uma nova visualização de relatório), posso fazer o mesmo novamente - vou reproduzir meus eventos.
Mas como devo lidar com a situação, quando o modelo de leitura ficou fora de sincronia com o log de eventos? O armazenamento de eventos e publicação está em uma transação, mas a atualização do modelo de leitura ocorreu em outra transação, que pode falhar. Repetir eventos desde o início pode ajudar, mas pode levar a eternidade. Preciso de um conceito de instantâneos para todo o modelo de leitura?
Como você resolve este problema? Obrigada.
Solução
Qual seria o motivo do fracasso no manipulador de eventos? Quanto tempo dura a "eternidade"?
Leia as atualizações do modelo raramente falham (diferentemente dos manipuladores de comando), pois a lógica interna é extremamente simples. É provável que as falhas sejam causadas por problemas transitórios (interrupção de IO/rede) e seriam tratados automaticamente pelo barramento de mensagens.
No entanto, se o modelo de leitura foi corrompido por algum motivo, a maneira mais fácil de redefini -lo e transmitir eventos. Mesmo milhões de eventos levariam tempo razoavelmente pequeno. Além disso, você sempre pode usar a abordagem de redes de mapa.
Eu recomendaria a introdução de instantâneos para ler modelos. Eu acho que isso apenas complica a arquitetura sem ganhos significativos.