Skip to content

Latest commit

 

History

History
81 lines (58 loc) · 5.51 KB

File metadata and controls

81 lines (58 loc) · 5.51 KB

A migração foi motivada pela necessidade de superar limitações do sistema monolítico tradicional e aproveitar os benefícios de uma estrutura modular, sem abrir mão da simplicidade de deploy que um monólito oferece. A seguir, detalhamos cada arquitetura apresentada no diagrama, destacando as principais diferenças e as justificativas para a mudança.

2.1. Monolito Tradicional

  • Descrição:
    O sistema original é implementado como um monólito, onde todas as funcionalidades e módulos compartilham o mesmo processo e ambiente de execução.

  • Características e Desafios:

    • Acoplamento Forte:
      As funcionalidades estão intimamente ligadas, fazendo com que mudanças em um módulo possam impactar o sistema inteiro.
    • Escalabilidade Limitada:
      O sistema só pode ser escalado como um todo, o que pode levar à utilização ineficiente de recursos.
    • Manutenção Complexa:
      Alterações e correções podem se tornar arriscadas e demoradas devido à falta de separação clara entre os domínios.
    • Deploy Unificado:
      Apesar de simplificar o deploy, o fato de todas as funcionalidades estarem no mesmo pacote dificulta a adoção de práticas de atualização contínua sem riscos.
  • Justificativa para a Mudança:
    A alta complexidade e os desafios de manutenção e escalabilidade evidenciaram a necessidade de uma separação melhor dos domínios do sistema, reduzindo o risco de impactos colaterais durante alterações.

2.2 Monólito Modular (MOM)

  • Descrição:
    A nova arquitetura mantém o sistema em um único processo, mas organiza o código em módulos bem definidos, cada um responsável por um domínio específico do negócio.

  • Benefícios:

    • Baixo Acoplamento:
      Os módulos são independentes e se comunicam por meio de interfaces e eventos, o que minimiza dependências diretas.
    • Escalabilidade Seletiva:
      Permite escalar individualmente os módulos críticos sem precisar replicar o sistema inteiro.
    • Manutenibilidade Melhorada:
      Alterações em um módulo podem ser realizadas com menor impacto nos demais, facilitando testes e atualizações.
    • Organização e Coesão:
      Cada módulo agrupa funcionalidades relacionadas, tornando o sistema mais organizado e alinhado com os princípios do DDD.
  • Justificativa para a Mudança:
    Ao adotar o conceito de Monólito Modular, a equipe consegue manter a simplicidade do deploy e a consistência do ambiente monolítico, enquanto aproveita as vantagens da modularização para facilitar a manutenção, permitir escalabilidade seletiva e reduzir riscos durante mudanças.

2.3 Comparativo Resumido

Aspecto Monolito Tradicional Monólito Modular (MOM)
Acoplamento Alto, com forte interdependência entre funcionalidades Baixo, com módulos isolados e comunicação definida
Escalabilidade Limitada à replicação do sistema completo Seletiva, permitindo escalonamento individual de módulos
Manutenção Complexa e arriscada com mudanças em larga escala Mais simples, com testes e atualizações isoladas
Deploy Unificado, porém impactante em caso de alterações Simples e consistente, com possibilidade de deploys segmentados
Organização Estrutura monolítica sem separação clara de domínios Organização alinhada com DDD, com responsabilidade bem definida

2.4 Objetivos da Migração

  • Escalabilidade: Permitir que módulos críticos sejam escalados de forma independente.
  • Modularidade: Organizar o código e isolar domínios, facilitando manutenções e evoluções.
  • Facilidade de Manutenção: Reduzir o acoplamento entre funcionalidades e melhorar a testabilidade do sistema.
  • Alta Disponibilidade: Garantir resiliência e tolerância a falhas.
  • Melhoria no Tempo de Resposta: Otimizar a performance e reduzir a latência.

2.5 Estrutura do Sistema Migrado

O sistema é dividido em módulos, onde cada um atua de forma autônoma dentro do mesmo processo. Exemplos de módulos:

  • Módulo de Produtos
  • Módulo de Pedidos
  • Módulo de Atendimento
  • Módulo de Usuários (Autenticação e Autorização)

Cada módulo comunica-se por meio de interfaces e, quando necessário, utiliza eventos para interagir com outros módulos.

2.6 Conclusão

A transição do monolito tradicional para o Monólito Modular foi realizada para:

  • Reduzir o acoplamento entre as funcionalidades, evitando que alterações em um módulo afetem o sistema inteiro.
  • Facilitar a escalabilidade, permitindo que módulos com alta demanda sejam escalados de forma independente.
  • Melhorar a manutenibilidade do sistema, tornando-o mais organizado e alinhado com os princípios de DDD e Arquitetura Limpa.

A escolha por uma arquitetura modular dentro de um monólito representa um equilíbrio estratégico: mantendo a simplicidade do deploy monolítico e, ao mesmo tempo, ganhando a flexibilidade e robustez de uma estrutura modular.

Diagrama de Arquitetura do Monólito Diagrama de Arquitetura do Monólito Modular