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".
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
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.
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)
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!
Fala, Paulo! Excelentes perguntas; muito obrigado!
Aliás, foram tão boas que fiz uma thread no Twitter respondendo a cada uma delas!