Disciplina: Programação Distribuída
Docente: Gustavo Wagner Diniz Mendes
O IQuadras é uma plataforma desenvolvida para facilitar o agendamento de quadras esportivas. Foi identificado que proprietários e usuários enfrentam dificuldades em gerenciar reservas, principalmente em relação à disponibilidade em tempo real, notificações e otimização de horários.
A solução envolve transformar o sistema em uma arquitetura baseada em sistemas distribuídos. Os módulos serão independentes (microsserviços) e se comunicarão usando tecnologias modernas como gRPC, RabbitMQ e Redis.
O sistema irá:
- Facilitar o agendamento e gerenciamento de quadras esportivas em tempo real;
- Melhorar escalabilidade e resiliência através de arquitetura distribuída;
- Otimizar performance utilizando cache distribuído e filas de mensagens;
- Garantir alta disponibilidade e tolerância a falhas por meio de replicação de dados e balanceamento de carga.
-
Serviço de Autenticação
- Autenticação e autorização de usuários (proprietários e clientes);
- Comunicação com outros microsserviços via gRPC.
-
Serviço de Reservas
- Gerenciamento de agendamento de quadras (criar, cancelar, modificar);
- Uso de RabbitMQ para processar solicitações em tempo real.
-
Serviço de Notificações
- Envio de notificações por e-mail e push sobre reservas;
- RabbitMQ para filas de mensagens assíncronas.
-
Serviço de Disponibilidade e Cache
- Implementado com Redis para armazenar dados temporários (ex.: disponibilidade de quadras);
- Redução de carga em bancos de dados relacionais.
-
Serviço de Pagamentos
- Gerenciamento de transações financeiras;
- Transações distribuídas para consistência dos dados.
- Hospedagem: AWS (ECS, S3) e Heroku para módulos menores.
- Banco de Dados:
- Firestore: Para dados não relacionais.
- PostgreSQL: Para dados relacionais.
- Comunicação entre módulos: gRPC para baixo tempo de resposta.
- Filas de mensagens: RabbitMQ para comunicação assíncrona entre serviços.
- Cache: Redis para melhorar a performance de leitura.
- Armazenamento em nuvem: Firestore para alta escalabilidade.
- Hospedagem e Deploy: AWS e Heroku para garantir disponibilidade e escalabilidade.
-
Transações Distribuídas:
Garantia de consistência em operações financeiras no serviço de pagamentos. -
Replicação de Dados:
Utilização de replicação no Firestore para alta disponibilidade. -
Tolerância a Falhas:
Estratégias de retries e failovers para lidar com falhas temporárias. -
Coordenação e Sincronização:
Sistema de lock distribuído com Redis para consistência nas reservas.
- Criação do documento inicial com descrição detalhada do projeto e arquitetura.
- Diagrama de comunicação entre módulos (imagem a ser anexada).
- Desenvolvimento dos microsserviços básicos.
- Configuração de filas de mensagens e comunicação via gRPC.
- Implementação de cache com Redis.
- Integração com serviços externos (notificações e pagamentos).
- Testes de performance e escalabilidade.
- Apresentação da aplicação e análise de performance (uso de CPU, memória e latência).
- Yuri Souza: Desenvolvimento do serviço de autenticação e integração com gRPC.
- Manoel Pedro: Implementação do serviço de reservas e filas de mensagens.
- Geraldo Neto: Configuração do serviço de notificações e integração com Redis.
- Luiz Manoel: Gerenciamento do serviço de pagamentos e transações distribuídas.