DEV Community

Francisco Zanfranceschi
Francisco Zanfranceschi

Posted on

[Desafio] - Race Condition em Sistemas Distribuídos

Conteúdo original em https://twitter.com/zanfranceschi/status/1743040590751977636


Ei dev,

Eu tenho a solução para sua falta de novos problemas! Yey 🥹

Cola aqui pra resolver esse desafio de RACE CONDITION em um SISTEMA DISTRIBUÍDO de compras.

description


DISCLAIMER: É um cenário simplificado e hipotético. (O diagrama tá em inglês porque vocês são tudo metido a besta, mas saibam que prefiro em pt_BR 💅).

Acredito que esse desafio seja adequado pra quem já é pleno – talvez os sandy e júnior sofram um pouco pra resolvê-lo.


CENÁRIO: Um conjunto de aplicações com serviços assíncronos de cadastro de cliente e processamento de pagamentos de compras.

However, existe a premissa de que um cliente já esteja persistido no banco do serviço de pagamentos para que os pagamentos sejam processados.

description


E para que essa premissa seja satisfeita, o serviço de cadastro emite um evento sempre que um cliente for cadastrado. A imagem mostra esse fluxo.

(Obs.: Esse padrão em que serviço de pgto guarda uma referência do cliente se chama "Event-Carried State Transfer" – já falei sobre.)

description

https://twitter.com/zanfranceschi/status/1511294401603006465


O PROBLEMA:

Só que para novos clientes, às vezes acontece do comando para processar o pagamento ser consumido antes do consumo do evento de cadastro do cliente. Temos aí um cenário de RACE CONDITION! Ebaaa! 🥲

E aí, o pessoal te incumbiu de resolver esse problema.

description


E pro problema ficar ainda mais problemático (afinal queremos problemas aqui, não é mesmo?), te pediram pra evitar o uso de banco de dados para essa resolução – lhe pediram para que use outras filas (??).

E aí, dev com tempo livre em busca de problemas, como resolve isso?!


Muito obrigado a você que chegou até aqui!!! ♥️

Top comments (0)