Monolito e Microserviços
Arquitetura Monolítica
Durante muitos anos a maioria das aplicações de software utilizaram a arquitetura monolítica, que nada mais é que um projeto com vários modulos em uma unica base de código. O termo monolíto faz uma referência a uma estrutura geológia, com por exemplo uma montanha formada por um único bloco de pedra e nesse contexto que podemos entender melhor com funciona essa arquitetura.
Em uma aplicação monolítica podemos obsevar que ela é basicamente constituida por um frontend (cliente WEB, mobile e etc), um backend que é responsável pela parte negecial ( API's, lógica da aplicação, operações banco de dados entre outras caracteristicas) e um banco de dados para persistir as informações. Muito projetos unificam a parte do frontend e do backend em um unico repositório mas é bem comum hoje em dia você encontrar essas duas partes completamente separadas.
Além da estrutura apresentada, um bom exemplo de uma arquitetura monolítica, seria um sistema de compras onde o todos os compontentes desde a parte do processamento de pagamento até o controle de usuários e gestão dos produtos estão em uma unica solução.
As principais caracterisicas dessa estrutura são:
- Toda a aplicação é desenvolvida em uma mesma tecnologia
- Os desenvolvedores são mais acostumados a trabalhar com esse tipo estrutura
- Simples para escalonar horizontalmente, executando várias cópias atrás de um balanceador de carga mas temos um custo mais alto porque para escalar precisamos replicar toda a stack do projeto.
- Maior dificuldade para atualizar as tecnologias.
- Recursos centralizados como por exemplo sessão e pull de conexão com o banco (Modelo Stateful)
Arquitetura de Microserviços
Os microsserviços são uma abordagem para o desenvolvimento de aplicativos, na qual uma aplicação grande é criada como um conjunto de serviços modulares (ou seja, módulos / componentes fracamente acoplados). Cada módulo suporta uma meta de negócios específica e usa uma interface simples e bem definida para se comunicar com outros conjuntos de serviços.
Em vez de compartilhar um único banco de dados como na arquitetura monolítica, cada microsserviço possui seu próprio banco de dados. Ter um banco de dados por serviço é essencial se você quiser se beneficiar dos microsserviços, pois garante um acoplamento flexível. Cada um dos serviços possui seu próprio banco de dados. Além disso, um serviço pode usar um tipo de banco de dados mais adequado às suas necessidades. Considere por exemplo um sistema de ecommerce que consiste em vários componentes / módulos. Defina cada componente / módulo como um serviço fracamente acoplado separado, dependendo do requisito, que pode colaborar entre si com base no cenário.
As principais caracterisicas dessa estrutura são:
- Facilidade para fazer escalonamento vertical e horizontal
- Facilidade em fazer atualizações tecnológicas
martinfowler.com fonte: https://microservices.io/ https://www.guj.com.br/t/stateless-e-sessao-para-ambiente-distribuido-como-fica-essa-arquitetura/196859/2