Skip to content

Perebati/fc-monolito-nodejs

Repository files navigation

Sistemas Monolíticos: Características e Aplicabilidade

O que são aplicações monolíticas

Aplicações monolíticas representam a arquitetura tradicional de desenvolvimento de software, caracterizada por serem implementadas como uma única unidade de deployment onde todos os componentes estão integrados em um processo unificado.

Polêmica em torno das aplicações monolíticas

Existe uma percepção equivocada de que sistemas monolíticos são:

  • Tecnologia ultrapassada da década anterior
  • Arquiteturas que não escalam adequadamente
  • Impeditivos para o crescimento do negócio
  • Inerentemente acoplados

Grande parte desses argumentos são falsos e baseados em preconceitos arquiteturais.

Quando utilizar monolitos é adequado

Sistemas monolíticos são recomendados em cenários específicos:

  • Projetos novos onde o modelo de negócio não está claramente definido
  • Situações de instabilidade no core do negócio
  • Necessidade de evitar complexidade no processo de deployment
  • Ambientes que requerem simplicidade operacional

Tipos de sistemas monolíticos

Single Process

  • Alto acoplamento: Todos os componentes compartilham o mesmo processo
  • Modular: Organização em módulos com responsabilidades específicas
  • Modular com bancos segregados: Separação de dados por contexto

Monolitos distribuídos

Sistemas que mantêm características monolíticas mas com componentes fisicamente separados.

Black box

Sistemas onde a arquitetura interna não é visível ou acessível externamente.

Evolução da entidade User

Abordagem tradicional problemática

Em sistemas mal estruturados, uma entidade User pode acumular responsabilidades excessivas:

  • Dados pessoais, endereços, cartões de crédito
  • Tickets de suporte, histórico de compras
  • Carrinho abandonado, devoluções, financiamento
  • Indicações, reclamações, email marketing
  • Campanhas, favoritos, lista de casamento
  • Histórico de login, preferências de email
  • Avaliações de produtos, dados de CRM
  • Propostas, lances em leilões, cartão de pontos

Problemas da abordagem centralizada

  • Ausência de contextos bem definidos
  • Entidades com relacionamentos excessivos
  • Falta de separação de responsabilidades
  • Alto risco de efeitos colaterais indesejados

Sistemas monolíticos modulares

Características

  • Módulos organizados em Bounded Contexts
  • Comunicação através de contratos e facades
  • Entidades específicas por contexto com atributos necessários
  • Equipes especializadas por módulo
  • Alta coesão: componentes que mudam juntos permanecem juntos

DDD como ponto de partida

A aplicação de Domain-Driven Design permite definir contextos específicos:

  • Catálogo: User como consumidor de produtos
  • Carrinho: User como comprador ativo
  • Checkout: User como finalizador de pedidos
  • Pagamentos: Cliente como pagador
  • Suporte: Cliente como solicitante de ajuda
  • Marketing: Lead como prospect
  • Programa de pontos: Beneficiário como acumulador
  • Lista de casamento: Convidado como participante

Cada contexto se torna um módulo independente com responsabilidades bem definidas.

Sistemas monolíticos modulares com bancos segregados

Esta abordagem mantém as características modulares mas implementa bases de dados separadas por contexto, proporcionando maior independência de dados entre módulos.

Monolitos versus microserviços

Vantagens dos monolitos modulares

  • Deployment único: Simplicidade no processo de entrega
  • Operação unificada: Menor complexidade operacional
  • Observabilidade simplificada: Monitoramento centralizado
  • Comunicação interna: Sistemas integrados sem overhead de rede
  • Governança reduzida: Tecnologia e linguagem unificadas

About

Repositório dedicado ao modulo sobre Sistemas Monólitos no curso Full Cycle 3.0.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published