3
respostas

Duvida sobre arquitetura de aplicação

Bom dia prezados. Sou iniciante em programação e recebi um desafio para desevolver um sistema em python que realize uma ação especifica pra regra de negocio da empresa. Consegui criar o sistema na arquitetura monolitica fazendo o que precisava ser feito e resolvendo a demanda de negocio. Porem agora preciso estruturar de forma mais robusta e decidi separa-lo em microserviços. no caso terá meu front web e instalavel windows comunicando com a minha api gateway (nginx) que comunicará com os microserviços (django) que comunicará com o banco de dados (postgres), tudo funcionando em container. Porem, estou em duvida se essa seria a melhor abordagem para realizar essa migração de arquitetura. Gostaria de uma instrução sobre os passos do meu projeto e se essa metodologia não vai me trazer problemas a longo prazo. alguem poderia me dar um help sobre isso? agradeço super. beijos

3 respostas

Oi, Rayra!

Legal que você está dando esse passo para evoluir a arquitetura do seu sistema!

Antes de tudo, vale pensar: você realmente precisa de microserviços?

Se sua aplicação é simples e não precisa de escalabilidade independente ou diferentes equipes trabalhando em áreas distintas, talvez um monolito ainda seja mais simples de gerenciar. Mas se você já tem um sistema que vai crescer ou precisa de mais flexibilidade, a migração para microserviços pode ser uma boa.

Você está pensando em usar API Gateway (Nginx), microserviços Django e PostgreSQL, tudo rodando em containers. Isso está certo, mas vale a pena considerar alguns ajustes:

  • Nginx pode ser usado como gateway, mas há outras opções como Kong ou Traefik que podem ser mais completas para APIs.
  • Django é ótimo, mas é monolítico. Para microserviços, você pode pensar em algo mais leve, como FastAPI, ou usar Django apenas para algumas partes.
  • PostgreSQL pode ser compartilhado entre os microserviços, mas é melhor que cada microserviço tenha seu próprio banco de dados, se possível, para evitar dependências fortes.

Faz assim:

  1. Identifique as funcionalidades que podem virar microserviços (ex.: autenticação, pagamento, etc).
  2. Comece com um ou dois serviços simples, com APIs bem definidas. Teste muito!
  3. Cada microserviço vai estar em um container, o que garante que eles funcionem de maneira isolada e consistente.
  4. : Use o API Gateway para rotear as requisições. Se necessário, implemente filas de mensagens para comunicação assíncrona entre os serviços (ex.: RabbitMQ ou Kafka).
  5. Use ferramentas de monitoramento como Prometheus e Grafana, e centralize os logs com ELK para facilitar o rastreamento de problemas.
  6. Se for necessário, use Kubernetes para gerenciar os containers em produção e escalar os serviços de forma independente.

Leve em conta que microserviços tornam a arquitetura mais complexa, especialmente quando se trata de deploy, monitoramento e comunicação entre serviços. Eles também podem aumentar o custo de infraestrutura, principalmente se você for usar ferramentas de orquestração como Kubernetes.

Não precisa migrar tudo de uma vez! Comece pequeno e vá separando os serviços aos poucos. Além disso, lembre que com microserviços, você vai precisar de boas práticas de CI/CD e monitoramento, então tenha isso em mente a longo prazo.

Espero que dê certo. Beijão.

Boa tarde Felipe. Agradeço a sua resposta e pensei bastante e pensando no futuro da aplicação acredito que microserviços seja a melhor abordagem.

Entendi o que falou sobre a construção mas fiquei com algumas duvidas:

Pergunta1: Em relação ao django, quando voce informa que ele se comporta melhor com monolitico, no caso ele é mais recomendado para desenvolvimento web, certo?

Pertgunta 2: no caso do meu portal web, seria recomendado com o django e os microserviços em FastAPI? é que segundo minhas pesquisas o django parecia melhor mas vou fazer o ajuste conforme voce recomendou.

Pergunta 3: Em relação ao banco de dados, tenho atualmente um container docker com postgres. Eu vi que o recomendado seria ter um banco de dados para cada microserviços, mas pensei em apontar todos os microserviços para esse mesmo endpoint e porta do banco principal. isso teria algum problema a longo prazo? se sim, de que maneira eu poderia contornar isso para que a aplicação usasse o mesmo banco?

Sobre CI/CD ja tenho no radar mas comecei a estudar as ferramentas que será necessário para começar a migração. super obrigada pela atenção. Beijos

Oi, Rayra! Que bom! Quanto a suas dúvidas:

  1. Django é ótimo para aplicações web completas, mas para microserviços, frameworks como FastAPI podem ser mais eficientes.

  2. Django para o portal web e FastAPI para microserviços é uma boa combinação.

  3. É melhor não compartilhar o banco de dados entre todos os microserviços, pois isso cria acoplamento. Idealmente, cada microserviço deve ter seu próprio banco, mas se for necessário usar um banco compartilhado, separe as tabelas e pense em como vai gerenciar a escalabilidade no futuro.

Qualquer coisa, me fala! Boa sorte com a migração! :*