Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida DevOps, como escalar websockets?

Boa tarde pessoal da alura tudo bem?

Eu estava conversando com alguns amigos aqui sobre escalação e coisas do tipo até que um deles estaria desenvolvendo um jogo em que o usuário tem a possibilidade de criar ou entrar em uma sala para jogar com outros jogadores.

No meio de eu estar estudando Kubernetes e verificar que webapis podem ser facilmente replicadas desde que sejam stateless, nos veio a cabeça que websockets o chão é mais em baixo, a conexão é estável e ele não se fecha, e ainda nesse caso do meu amigo é necessário que o mesmo se conecte a uma sala específica para se comunicar com jogadores específicos.

E a questão foi, como se escala servidores websockets para réplicas também?

Não consigo imaginar uma maneira tão fácil e espontânea assim uma vez que se replicado o usuário poderia se conectar no servidor "errado", que não possui uma conexão estável com os outros usuários da mesma sala.

Aguardo respostas e discussões, acho que é um tema legal de se debater, peço desculpas caso já exista um tópico sobre o assunto aqui no fórum, e eu também não sabia em que categoria postar essa dúvida, obrigado.

1 resposta
solução!

Olá Renan, tudo bem? Nesse caso de websockets, o que vocês vão precisar é criar um servidor Pub/Sub.

Segundo a documentação oficil do Cloud Pub/Sub: "O Pub/Sub traz a flexibilidade e a confiabilidade do middleware corporativo orientado a mensagens para a nuvem. Ao mesmo tempo, o Pub/Sub é um sistema de processamento e entrega de eventos durável e escalonável que serve como base para canais de análise de stream modernos. Ao oferecer mensagens assíncronas de muitos para muitos que separam remetentes e destinatários, ele permite uma comunicação segura e altamente disponível entre aplicativos criados de modo independente."

Sendo esse servidor Pub/Sub vai retransmitir as mensagens do websocket para todos os outros nós, uma boa ferramenta seria o Redis. Nesse caso, esse servidor Pub/Sub vai retransmitir as mensagens, ou então transmitir a informação para todos os nós ou servidores websocket, como mencionado nesse outro artigo que tem essa questão como tema.

Espero ter ajudado!