Descrição
A primeira versão desse serviço não possui uma arquitetura bem definida, além de precisar de mais recursos do que realmente é necessário. Isso se deve, primariamente, à pouca atenção que demos ao projetá-lo.
Por isso, proponho mudanças fundamentais na arquitetura desse serviço, garantindo sua escalabilidade de uma maneira mais fácil.
Como funciona atualmente:
-
Existe um cronjob que envia uma requisição HTTP para o Lino Alerta a cada X segundos, requisitando o e-mail mais recente no inbox do Gmail.
-
Ele verifica se remetente do e-mail existe na base.
-
Depois, caso passe, verifica se o id do e-mail já existe na base.
a. Caso exista, responde que não existe uma mensagem nova.
b. Caso não exista, ele o salva na base e o envia na resposta da requisição.
Sugestões de melhoria
O Lino Alerta não precisa de uma coleção no banco de dados que armazena as mensagens, nem um cronjob, especificamente. É possível alcançar essa feature através de WebSockets, push notifications, webhooks etc.
- Vejam mais sobre isso na documentação da API do Gmail: aqui e também aqui.
- Achei um exemplo em Ruby para notificações num chat do Slack: aqui.
Bom semestre à todos!
Descrição
A primeira versão desse serviço não possui uma arquitetura bem definida, além de precisar de mais recursos do que realmente é necessário. Isso se deve, primariamente, à pouca atenção que demos ao projetá-lo.
Por isso, proponho mudanças fundamentais na arquitetura desse serviço, garantindo sua escalabilidade de uma maneira mais fácil.
Como funciona atualmente:
Existe um cronjob que envia uma requisição HTTP para o Lino Alerta a cada X segundos, requisitando o e-mail mais recente no inbox do Gmail.
Ele verifica se remetente do e-mail existe na base.
Depois, caso passe, verifica se o id do e-mail já existe na base.
a. Caso exista, responde que não existe uma mensagem nova.
b. Caso não exista, ele o salva na base e o envia na resposta da requisição.
Sugestões de melhoria
O Lino Alerta não precisa de uma coleção no banco de dados que armazena as mensagens, nem um cronjob, especificamente. É possível alcançar essa feature através de WebSockets, push notifications, webhooks etc.
Bom semestre à todos!