Pitch: Mine Hour: Hospedagem de Minecraft Sob Demanda!
Fala pessoal, tudo certo?
Gostaria de compartilhar com vocês um projeto que venho desenvolvendo faz um certo tempo e que finalmente está em uma fase publicável Mine Hour (https://minehour.com/).
Durante anos sempre curti jogar Minecraft com amigos, mas a gente só conseguia se reunir de vez em quando (principalmente nos finais de semana ou algumas poucas horas durante a semana e só quando o host do radmin tava on). O problema era que qualquer serviço de hospedagem de servidor de minecraft cobra uma mensalidade fixa para manter a máquina ligada 24/7. No nosso caso, o servidor ficava vazio em 90% do tempo, e a gente acabava jogando dinheiro fora.
Daí veio a ideia: por que não criar um serviço de hospedagem onde só se paga pelo tempo em que o servidor está realmente ativo e os jogadores online?
Se ninguém está jogando, o servidor desliga e o consumo de créditos para. Quando você e seus amigos querem jogar, o servidor inicia em segundos, carrega o mapa de onde parou, e a cobrança é feita de forma transparente por hora de uso de acordo com os créditos que você tem disponíveis.
Como funciona a infraestrutura por trás
Eu queria que a infraestrutura fosse moderna, barata de manter e escalável. O fluxo técnico funciona assim:
- Containers de Minecraft: Cada servidor é um container temporário na Oracle Cloud (OCI) rodando uma imagem customizada de Minecraft. Isso garante isolamento total de recursos e inicialização relativamente rápida.
- Persistência do Mapa: Toda vez que um servidor desliga ou pausa por inatividade, o estado atualizado do mundo é salvo em um storage compatível com S3. Quando o servidor inicia de novo, o mapa é restaurado instantaneamente.
- Roteamento Dinâmico: Para que os jogadores conectem usando sempre o mesmo IP/domínio, usei um proxy que conheço há muito tempo e sempre quis testar, na minha época dos grandes servidores de mine sempre usava BungeeCord porque era o que tinha na época, mas encontrei esse projeto Minekube Gate (escrito em Go). Criei um microserviço em Rust que gerencia a tabela de rotas dinamicamente. Quando o servidor é iniciado no painel, a rota é atualizada para redirecionar o tráfego TCP do IP principal direto para o IP temporário do container da Oracle Cloud onde o servidor foi provisionado. O jogador conecta instantaneamente sem precisar saber o IP real do container.
- Desligamento e Avisos In-Game: Um script monitora a contagem de jogadores ativos. Se o servidor ficar vazio por algum tempo, ele desliga automaticamente para economizar créditos. E se os créditos do usuário estiverem acabando enquanto ele está jogando, enviamos avisos via console do jogo para alertar in-game ("Aviso: Restam 10 minutos de créditos..."), garantindo que ninguém seja desconectado de surpresa.
O que eu testei para chegar nessa infraestrutura
Inicialmente eu queria usar Magalu Cloud, uma vez descobri sobre a existência desse provedor de cloud da magalu, quando tive a ideia dessa minha plataforma sempre pensei em usar a Magalu Cloud principalmente pelos preços por hora ser muito competitivo, porém tinha alguns impasses, fazer automações grandes como usar kubernetes é complicado para o meu caso eu estava fugindo de custos fixos principalmente nessa fase inicial, tentei usar a função snapshot da magalu, achei interessante funcionou perfeitamente para o meu caso, a instancia iniciava em um tempo relativamente bom, e só tive o trabalho para automatizar deploys de novas snapshot, porém ao entrar em contato com o suporte da magalu cloud perguntei se eu poderia fazer uma aplicação de tipo, e se não caracterizava revenda, eles consultaram o juridico e no fim não consegui dar prosseguimento na magalu, e também eu teria que solicitar mais cotas de instancias, posso criar se não me engano no máximo 6, não me lembro exatamente agora.
Considerando preços da AWS estava fora do radar no brasil, então só usei a AWS para hospedar o backend. Entre outras opções acredito que a Oracle Cloud foi o que mais encaixou para o meu caso, mesmo sendo ligeiramente mais caro que a Magalu.
O projeto está no ar em https://minehour.com/.
Se vocês puderem comentar sobre essa abordagem de cobrança por hora em servidores de minecraft e sobre a arquitetura de infraestrutura.
Se quiserem trocar uma ideia sobre o projeto e dar uma força, entrem no discord que criei: https://discord.gg/DxJFknfmHZ