Construindo uma Aplicação com Comunicação em Tempo Real Usando Fastify, RabbitMQ e Arquitetura Distribuída



This content originally appeared on DEV Community and was authored by Layssa Lima

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.

Diagrama da arquitetura do projeto

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.

Modelagem das tabelas do banco da aplicação
Nessa modelagem, estabeleci:

  • 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!


This content originally appeared on DEV Community and was authored by Layssa Lima