Consistência do banco de dados com microsserviços

Qual é a melhor maneira de obter consistência de banco de dados em sistemas baseados em microsserviços?

NoGOTO em Berlim, Martin Fowler estava falando sobre microsserviços e uma "regra" mencionada era manter bancos de dados "por serviço", o que significa que os serviços não podem se conectar diretamente a um banco de dados "pertencente" a outro serviço.

Isso é super agradável e elegante, mas na prática se torna um pouco complicado. Suponha que você tenha alguns serviços:

um frontendum serviço de gerenciamento de pedidosum serviço de programa de fidelidade

Agora, um cliente faz uma compra no seu front-end, que ligará para o serviço de gerenciamento de pedidos, que salvará tudo no DB - não há problema. Nesse ponto, também haverá uma chamada para o serviço do programa de fidelidade, para que ele credite / debite pontos da sua conta.

Agora, quando tudo está no mesmo servidor DB / DB, tudo se torna fácil, pois você pode executar tudo em uma transação: se o serviço do programa de fidelidade falhar em gravar no DB, podemos reverter tudo.

Quando realizamos operações de banco de dados em vários serviços, isso não é possível, pois não confiamos em uma conexão / aproveitamos a vantagem de executar uma única transação. Quais são os melhores padrões para manter as coisas consistentes e viver uma vida feliz?

Estou muito ansioso para ouvir suas sugestões! .. e obrigado desde já!

questionAnswers(4)

yourAnswerToTheQuestion