O que tenho ouvido hoje nas rodas de conversa entre desenvolvedores é que, na maioria das vezes, as soluções para a arquitetura de sistemas são os microsserviços. Como um bom profissional (sem falsa modéstia), entro em conversas para aprender e depois pesquisar sobre, para aí então, criar minha própria opinião a respeito de algo.
Antes de entrar no assunto de arquitetura de sistemas de Monolíticos e Microsserviços, é necessário entender o que é um serviço. Serviço é um pedaço de software que na maioria das vezes é uma interface exposta ao usuário, que por fim requisita algo a um banco de dados ou realiza algum tipo de processamento das informações recebidas. Essas características podem ser encontradas em ambas as arquiteturas citadas acima.
Hoje, tenho a oportunidade de trabalhar em uma arquitetura moderna, não a que se usa atualmente, muito menos aquela arquitetura de projetos monolíticos.
Mas, quais são as características de um sistema monolítico?
Vale lembrar que um sistema monolítico é a arquitetura padrão de muitos projetos atuais cujo sistema engloba em um único projeto, todos os seus módulos, como: login, pedidos e produtos. Por exemplo, um sistema de compra sem restrição de tamanho e uma gama enorme de código, mas que não para de crescer e acaba virando uma bagunça de pacotes e classes.
Esses problemas nos fazem gastar mais tempo desenvolvendo uma funcionalidade; perde-se muito tempo procurando o que vamos aproveitar do sistema, assim como o alto acoplamento entre módulos e serviços. Uma falha no desenvolvimento pode afetar todos os sistemas, sem contar que o processo de implantação e integração contínua é um desafio, já que a questão de escalabilidade requer a duplicação de todo o sistema.
Características de Microsserviços
Hoje, a principal vantagem de se utilizar Microsserviços é a necessidade de fazer mudanças de forma rápida, tanto no desenvolvimento quanto em tecnologias. Diferente de um projeto comum que possui apenas uma stack para desenvolver todo o sistema, Microsserviços nos proporciona um multi-stack.
Por ser uma arquitetura de pequenos projetos com apenas um foco, ela nos proporciona mais segurança, ou seja, se uma parte para de funcionar, por exemplo, isso não afeta o restante do projeto. Entrega e implantação não é mais um problema, já que uma alteração não afeta todo o sistema, e sim, somente o módulo específico.
Os benefícios que temos com Microsserviços são menor tempo de desenvolvimento; implementação mais rápida por não ter mais um acoplamento com o projeto como um todo (o que traz facilidade para frequentes atualizações e implementações de novas funcionalidades); a distribuição de sistemas e banco de dados (que provê uma segurança maior); alta escalabilidade; melhor performance; além de a tecnologia certa para a resolução de um problema possibilitando também um time distribuído.
A arquitetura de Microsserviços nos permite uma alta coesão, ter apenas um foco com uma única responsabilidade nos dá mais segurança e código fácil de ser reescrito que traz uma certa flexibilidade. A arquitetura ainda propõe ser um sistema resiliente, abrangente a falhas com outras formas de tratar o que está sendo pedido, e contornando o problema com uma melhor solução. Sejam elas falhas tratadas com exceções, atrasos e/ou indisponibilidade.
Um projeto em Microsserviços deve ser observável para manter a saúde do sistema com logs status e erros, tendo partes de logins e monitoramento centralizado. O que facilita a resolução dos problemas.
Referências
- https://www.thoughtworks.com/pt/insights/blog/microservices-nutshell
- https://app.pluralsight.com/player?course=microservices-architecture&author=rag-dhiman&name=microservices-architecture-m2&clip=0&mode=live
- https://github.com/guuhworship/spring-cloud/blob/master/hello-client/src/main/java/com/techprimers/stock/helloclient/resource/HelloResource.java
***
Este artigo foi publicado originalmente em: https://www.concrete.com.br/2018/01/19/microsservicos-comparando-com-a-arquitetura-monolitica/