Há cerca de três meses, participei de um desafio que me deixou bastante empolgada.
Por essa razão resolvi compartilhar como foi o processo de desenvolvimento, as escolhas técnicas que fiz e alguns aprendizados ao longo do caminho.
Aceito sugestões de melhorias.
⚠️ Spoiler: o projeto está apenas no começo, ainda há muito para ser desenvolvido, inicialmente estou compartilhando apenas o que foi feito em um desafio entre 3 e 4 dias
Repositório: Dwitch
O DESAFIO
O objetivo era criar uma aplicação completa:
- Frontend e backend
- Autenticação
- Persistência de dados
- Observabilidade
- Mensageria
Tudo isso em uma arquitetura distribuída, com documentação do projeto.
Ponto de partida
O primeiro passo foi decidir qual aplicação desenvolver. Como eu já tinha interesse em me aprofundar no tema, optei por criar uma aplicação de transmissão ao vivo, mesmo sabendo que o tempo disponível não permitiria implementar todas as funcionalidades reais desse tipo de sistema.
Arquitetura
O passo seguinte foi definir a arquitetura.
Comecei pensando nas funcionalidades que o sistema deveria ter, organizando-as em módulos e alinhando tudo aos requisitos do desafio.
No desenho, temos um banco PostgreSQL centralizando os dados do sistema e quatro módulos principais:
- Auth - autenticação.
- Channels - CRUD de canais.
- User - CRUD de usuários.
- Broadcast - comunicação das transmissões.
Nesse estágio inicial, optei por simular a comunicação em tempo real por meio de mensagens — algo que é bem diferente de uma transmissão ao vivo real, mas que atendia ao escopo e tempo do desafio.
Sobre os módulos
Os módulos foram implementados com Fastify, cuja sintaxe é bastante familiar para quem já trabalhou com Express.
Para mensageria, utilizei RabbitMQ.
Modelagem dos dados
Após visualizar a aplicação e a arquitetura, passei para a modelagem do banco de dados.
- A relação entre usuários e canais
- A relação entre canais e transmissões
- O vínculo das transmissões com seus respectivos logs
Dessa forma, é possível acompanhar o status de cada transmissão e manter um histórico de alterações.
Ferramentas utilizadas nessa etapa
- Diagramas: Draw.io
- APIs: Fastify
- Mensageria: RabbitMQ
- Protocolos: HTTP e WebSocket
💡 Próximos passos: no próximo post, quero detalhar como implementei cada módulo e como configurei a comunicação entre eles.
Se tiverem dúvidas ou sugestões de melhorias, deixem nos comentários!
Top comments (0)