O que é uma aplicação monolítica?

Um aplicativo monolítico combina a interface do usuário e as camadas de acesso a dados para vários recursos em um único aplicativo. Normalmente, um aplicativo monolítico existirá como uma única base de código que é modificada por várias equipes dentro de uma organização e será implantado como uma única unidade contendo todas as funcionalidades que essas equipes mantêm.

Aplicações monolíticas geralmente podem ser mais fáceis de desenvolver e implantar graças à forte integração de seus componentes. No entanto, à medida que o escopo da aplicação e as demandas de desempenho aumentam, um monólito pode se tornar difícil de manter e dimensionar.

Exemplos de arquiteturas de aplicações monolíticas

Sistemas monolíticos podem ser uma boa opção para aplicações menores e menos complexas que não precisam ser dimensionadas rapidamente ou mantidas rotineiramente. Abaixo estão alguns exemplos de aplicativos que geralmente têm bases monolíticas (embora suas funcionalidades mais recentes possam ser baseadas em uma infraestrutura mais conteinerizada ).

  • Plataformas de comércio eletrônico: aplicações monolíticas são comumente vistas no comércio eletrônico porque, uma vez que a infraestrutura é configurada (construção da loja on-line, processamento de pedidos, processamento de pagamentos e atendimento ao cliente), são necessárias poucas atualizações da arquitetura.
  • Sistemas de gerenciamento de conteúdo (CMS) – Esta entrada do glossário foi possível graças a um aplicativo monolítico (WordPress). Os aplicativos CMS, quando implantados, contêm todas as funcionalidades necessárias para o gerenciamento de conteúdo na forma de páginas da web.
  • Sistemas bancários – Muitos sistemas financeiros são construídos como aplicativos monolíticos porque os pontos de entrada são limitados, tornando-os mais seguros. Além disso, após a implantação, a base de código contém todas as funcionalidades que um consumidor espera de uma experiência bancária on-line: gerenciamento de transações financeiras, processamento de pagamentos e rastreamento.
Vantagens de uma arquitetura monolítica

Embora alguns aspectos das arquiteturas monolíticas tenham ficado desatualizados, ainda existem muitos propósitos e atributos positivos.

Algumas vantagens dos monólitos incluem:

  • Simplicidade – A arquitetura centralizada torna os monólitos mais fáceis de desenvolver, implantar e manter quando comparados a arquiteturas mais complexas, como arquiteturas de microsserviços .
  • Testes mais rápidos – Ao integrar todos os componentes em um programa, um aplicativo monolítico pode ser testado rapidamente como um todo. Ao contrário de arquiteturas compostas por vários componentes menores (por exemplo, microsserviços ), não há testes adicionais para protocolos de comunicação complexos nem múltiplos repositórios de código.
  • Segurança – Com menos pontos de entrada para malfeitores, os monólitos são geralmente mais fáceis de proteger. Também é mais fácil aplicar protocolos de segurança em um aplicativo do que gerenciar várias configurações de segurança.
  • Custo: implantados como uma única unidade, os monólitos removem os custos extras associados à implantação e proteção de protocolos de comunicação adicionais, à construção de uma infraestrutura mais conectada e à contratação de funcionários com habilidades e treinamento mais especializados.
Desvantagens de uma arquitetura monolítica

Embora a natureza singular dos monólitos tenha seus aspectos positivos, ela também pode levar a problemas.

Algumas desvantagens dos monólitos incluem:

  • Aumento da complexidade – Com o tempo, o crescimento e a funcionalidade adicional de um aplicativo podem fazer com que uma arquitetura monolítica fique maior e mais complexa. Essa dispersão aumenta o risco de que uma atualização possa comprometer a única base de código que mantém todo o programa funcionando sem problemas.
  • Falta de escalabilidade – Quando um recurso ou área do aplicativo precisa ser dimensionado horizontalmente, todo o aplicativo grande (incluindo subsistemas que não exigem recursos adicionais) deve ser dimensionado. Isso pode levar tanto à lentidão no dimensionamento, já que as implantações demoram mais, quanto ao aumento de custos, já que cada instância terá maiores requisitos de hardware para ser executada quando comparada aos microsserviços.
  • Resiliência – Em uma arquitetura monolítica, todos os componentes do aplicativo são fortemente vinculados e executados a partir de uma base de código central. Portanto, se um falhar, todo o aplicativo poderá cair.
  • Reimplantação completa – Com uma única base de código representando todo o aplicativo, um monólito requer uma reimplantação completa sempre que um único componente é alterado ou atualizado.
  • Pilha de tecnologia – Como os desenvolvedores precisam garantir que quaisquer ferramentas ou linguagens que eles usam se encaixem no monólito, a escolha é restrita. Além disso, muitos aplicativos monolíticos são escritos de maneiras que não são completamente compatíveis com tecnologias mais novas e eficientes, como computação em nuvem e conteinerização.
  • Desenvolvimento mais lento – Quando várias equipes de desenvolvimento estão trabalhando em uma grande base de código, é necessário extremo cuidado para garantir que as interfaces e os limites de domínio sejam respeitados e mantidos. Às vezes, o código pode introduzir acoplamentos complexos, fazendo com que dependências entre equipes retardem o desenvolvimento de novos recursos ou correções de problemas críticos.
O que é uma arquitetura de microsserviços?

Em contraste com a arquitetura monolítica, existe a arquitetura de microsserviços . Microsserviços é uma abordagem à arquitetura de software que cria um aplicativo grande e complexo a partir de pequenos componentes. Cada um desses componentes pode executar uma única função (por exemplo, autenticação, notificação ou processamento de pagamento) ou funcionar como pacotes dentro de um monólito. “Microsserviços” (ou apenas “serviços”) também é o termo para os próprios pequenos componentes.

Enquanto aplicativos monolíticos são fortemente acoplados (o que significa que seus componentes são interconectados), um aplicativo de microsserviços é distribuído (o que significa que seus componentes podem agir de forma independente). À medida que os aplicativos se tornam maiores e mais complexos, muitas organizações estão explorando a possibilidade de migrar de monólitos ou incorporar novos aplicativos em um formato de microsserviços.

O NGINX tem o orgulho de oferecer os seguintes recursos educacionais gratuitos para quem explora monolíticos e microsserviços