DEV Community

Francisco Zanfranceschi
Francisco Zanfranceschi

Posted on • Updated on

 

[Desafio] - Sistema de Votação BBB

Conteúdo original nessa thread to twitter.


Esses dias um monte de gente comentou sobre a infra/arquitetura da Globo pra aguentar a porrada das votações do #BBB22.

Se você quiser ter uma ideia NA PRÁTICA de como isso funciona, aceite esse desafio técnico aqui. Dá uma lida aqui :)

cc @sseraphini

🧵👇


A ideia geral é separar o processo em dois:

1 - Receber o voto: é a parte delicada que tem que aceitar as milhares de requisições/segundo.

2 - Computar o voto: é a parte que realmente "salva o seu voto no banco de dados".

Parte 01 - Recepção do Voto


Desafio:

1 – Crie uma API que receba um voto e publique numa fila e rapidamente retorne algo como "solicitação aceita" (vc não sabe se deu tudo certo, né?).

2 – Crie um processo em plano de fundo que leia dessa fila e salve o voto no banco de dados (ou só memória pra praticar).


A sugestão para essa tal de fila é usar o RabbitMQ num container docker pra ficar mais fácil.

$ docker run -p 15672:15672 -p 5672:5672 rabbitmq:3-management

e acesse http://localhost:15672 com usuário e senha guest/guest


Sobre como usar o RabbitMQ (publicar/consumir), use o tutorial 3 – "Publish/Subscribe" do tutorial oficial e escolha sua linguagem preferida.

https://www.rabbitmq.com/getstarted.html

Tutorial 03 RabbitMQ - Pub/Sub

Claro, se vc não tiver familiaridade com filas e rabbitmq, siga os tutoriais desde o início – vale a pena.


Se tiver alguma dúvida, coloca aqui que a gente vai se ajudando. É um exercício muito legal que vai molhar seu pé em sistemas distribuídos.

Claro que é uma versão simplificada e que a Globo não faz exatamente assim – esse desenho é só um hello world da ideia geral.


Se esse assunto te interessa, recomendo fortemente que leia o livro EIP (Enterprise Integration Patterns) do Gregor Hohpe e Bobby Woolf – é um must read pra qualquer um inserido/interessado em integrações via filas. O livro é antigo, mas seus conceitos são atemporais; servem pra tecnologias modernas.

EIP - Enterprise Integration Patterns

Esse livro tem um site com os padrões e explicações breves sobre cada um. É um ótimo lugar para referências rápidas.

Top comments (2)

Collapse
 
paulohfs profile image
Paulo Hernane

Olá Francisco, desde já agradeço pelos desafios, já havia visto eles, mas só agora pude começar a me envolver, assim sendo, fiz uma simples solução, foi bem interessante, nunca tinha trabalhado com rabbitmq, nem com o protocolo amqp.

Estou começando agora estudar sistemas distribuidos e arquitetura de software, e sobre essa solução expandido para o caso real, é correto dizer que na implementação real há a criação automática de mais instâncias da API para aguentar a carga da quantidade de requisições no dia da votação, certo? E quanto ao worker, mantem apenas um consumindo? ele dá conta ou tem que balancear também? E o RabbitMQ também se mantem só uma instância para lidar com a mensageria? há como escalar ele (faz sentido isso kkk)? E quanto a conexão com o banco, acredito que como há só operações de write, pode haver multiplas conexões de vários workers certo?

Desculpa a quantidade de duvidas, elas surgiram quando eu estava pensando em realizar um teste de carga na API, fico grato se conseguir alguma referência para que eu possa ler!

Collapse
 
zanfranceschi profile image
Francisco Zanfranceschi

Fala, Paulo! Excelentes perguntas; muito obrigado!

Aliás, foram tão boas que fiz uma thread no Twitter respondendo a cada uma delas!

An Animated Guide to Node.js Event Loop

>> Check out this classic DEV post <<