DEV Community

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

Posted on

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

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!

Top comments (0)