DEV Community

Yan.ts
Yan.ts

Posted on

Pontos positivos e negativos para Sistemas monolíticos

Sistemas monolíticos

Normalmente o sistema monolíticos são aplicações tradicionais, onde tudo fica dentro do mesmo sistema. A forma mais fácil de distinguir se um sistema é monolítico é se quando queremos subir uma alteração no sistema de pagamentos, a parte de login precisa fazer o deploy junto.

A polemica por trás

Como os monolitos são mais velhos tem muitas polemicas relacionadas a eles, muitas pessoas falam de ser algo ultrapassado, que não escala, e que tem alto acoplamento. Porem muitos desses argumentos são falsos, por exemplo o stack overflow até hoje é um sistema monolítico. Outro ponto é que o sistema não fica altamente acoplado por conta própria, porem de fato acaba sendo "mais fácil" deixa ele altamente acoplado por conta do código estar ali já no mesmo sistema

Quando pode ser uma boa utilizar

  • Novos projetos onde o modelo de negócio não está claro
  • Instabilidade no core do negócio
  • Evitar complexidade no deploy
  • Evitar complexidade na operação

Tem esse artigo do Martin Fowler onde ele descreve o porque ele prefere aplicações que foram monolitos primeiro.

Image description

Ele fala sobre como na maioria das vezes nas quais ele viu aplicações que começaram como microsserviços os devs tiveram problemas no futuro porem quando começaram como monolitos e quando ficou muito grande quebraram em microsserviços geralmente gerou resultados positivos. Isso não se aplica para todos os casos principalmente quando as regras de negócios estão bem definidas e é uma aplicação que precisa de uma grande disponibilidade

Tipos de sistemas monolíticos

O livro Monolitos para microserviços lista os tipos de sistemas monolitos como 3 tipos

  • Monolitos distribuídos
  • Black box

  • Single process

sendo que o single process pode ser dividido em 3 outros tipos

  1. Alto acoplamento

  2. Modular

  3. Modular com bancos de dados segregados

Sistemas monolíticos acoplados

Pensando em longo prazo com uma entidade de "User" nós vamos precisar acoplar a ele:

  • Dados Pessoais
  • Endereços
  • Cartões de crédito
  • Tickets de suporte
  • Compras
  • Carrinho abandonado
  • Devoluções
  • Financiamento
  • Indicações
  • Reclamações
  • E-mail mkt
  • Campanhas
  • Favoritos
  • Lista de casamento
  • Histórico de login
  • Lista de preferencia de emails
  • Avaliação de produtos
  • Cartão de pontos

Essa entidade vai crescendo cada vez mais até que um momento a única solução acaba sendo quebrar para microsserviços. Os principais problemas dessa abordagem são

  • Não existe contexto
  • Entidades se relacionam
  • Não há divisão. Tudo faz parte de tudo.
  • Efeitos colaterais indesejados

Sistemas monolíticos modulares

DDD é um ponto de partida

Image description

podemos ter um user para cada contexto inclusive dependendo do contexto ele deixa de ser um user e passa a ser um convidado ou beneficiário

Multiplos modulos se conectando a um banco de dados

Separando os contextos em módulos podemos evitar o alto acoplamento.

  • Módulos são quebrados em 'Bounded contexts'e eles conversam através de contratos e facades ou seja um modulo não deve saber o que tem no outro modulo
  • As entidades podem ser "duplicadas" tendo apenas os atributos necessários.
  • Equipes especializadas por módulos
  • Alta coesão: O que muda junto, permanece junto

Sistemas monolíticos modulares com bancos de dados segregados

múltiplos módulos se conectando em múltiplos bancos

A diferença desse tipo de sistema é que cada modulo pode ter o seu próprio banco de dados. Assim faz com que os desenvolvedores de cada modulo tenham mais liberdade para trabalhar nos seus módulos sem medo de quebrar os outros.

Porem o ponto negativo é que vamos ter muitos dados duplicados, e tem que ser garantido a integridade dessas informações duplicadas.

Top comments (0)