Os microsserviços estão em voga, possuem o seu mérito, mas seriam realmente a melhor opção para o desenvolvimento de projetos ? |
Vamos iniciar apresentando o que são microsserviços
para quem esta chegando agora.
Antes de começar a verificar se a arquitetura de microsserviços é a melhor opção para o seu projeto, tentaremos entender o que são microsserviços.
Se você acha que escrever o código e expô-lo como o
serviço REST é um microsserviço, seu entendimento não esta correto, pois, nem
toda API REST é um microsserviço.
Podemos dizer que na indústria de software existem três tipos mais usados de arquiteturas.
Arquitetura de monolíto ou monolítica
SOA
Microsserviços
Na década passada, os anos 2000, os aplicativos
corporativos foram desenvolvidos usando arquitetura monolítica. Todos os objetos
de UI, lógica de negócios e acesso aos dados residiam em um único servidor. Todo
o código presente neste servidor costumava se comunicar com o banco de dados.
Não havia modularidade ou fraco acoplamento.
A SOA ou arquitetura orientada a serviços foi construída principalmente
dividindo a lógica entre vários serviços. Isso ajudaria outros aplicativos a
usar a mesma lógica, se necessário. Não era fortemente acoplado a uma única
aplicação. O serviço pode ser implantado em servidores diferentes em comparação
com o código de acesso a dados ou o código da interface do usuário. Nesse tipo
de arquitetura, a interface do usuário não se comunicaria diretamente com os
serviços, mas sim interagiria usando uma URL de proxy fornecida por ferramentas
como o barramento de serviço corporativo.
Os microsserviços são a evolução mais recente da maneira como os aplicativos interagem com os bancos de dados. Na arquitetura Monolítica ou SOA mesmo para uma única mudança temos que fazer um release inteiro, o que causaria desperdício de tempo e recursos. Na arquitetura de microsserviços, todos os componentes de negócios são divididos em pequenos serviços separados. Isso ajuda a reduzir o tempo de implantação, além disso, esses serviços são facilmente escaláveis.
Vantagens dos microsserviços
1- São pequenos
Como o nome sugere, estes são pequenos e facilmente compreensíveis pedaços de
código. Mas como decidiria, quão pequeno é pequeno? A resposta é , se você
perder o código do microsserviço ou jogá-lo em algum lugar e puder reescrevê-lo
em alguns dias ou em uma semana ou duas. Você tem um microsserviço.
2- Focam em uma tarefa
Isso está realmente relacionado à separação de interesses no domínio do
problema. Se você estiver manipulando e fazendo várias coisas em seu serviço,
isso não é um candidato para microsserviço. Ele faz uma tarefa quando visto de
fora. Aqui os módulos não são acoplados entre si. Recursos individuais podem ser
liberados e implantados sem perturbar ou testar outros módulos.
3- São Autônomos
As equipes que estão trabalhando em um microsserviço específico podem trabalhar
separadamente sem colaborar com outras equipes. A equipe pode alterar a
implementação do serviço sem coordenação com mais ninguém.
4- Podem ser implantados de forma independente
A capacidade de implantação é uma das características desses serviços que os
tornam altamente úteis. Como uma equipe trabalhando em um recurso do projeto,
não precisa ser dependente da outra equipe, pois nenhuma das funcionalidades se
cruzam.
As equipes podem decidir independentemente quando implantar cada parte do
serviço.
Se você precisar testar seu serviço com outros serviços, não é um microsserviço.
Devemos ser capazes de construir, testar e implantar o microsserviço de forma
independente.
5. Possuem
escalabilidade
Com microsserviços, cada serviço pode escalar independentemente para atender uma demanda.
Desvantagens dos microsserviços
1- Complexidade
Os microsserviços são altamente complexos devido à sua natureza dispersa.
Precisamos manter vários sistemas para cada serviço. Estes são ideais para
grandes equipes. Essas equipes podem cuidar individualmente desses sistemas.
2- Sobrecarga de infraestrutura
Há uma enorme sobrecarga de infraestrutura para manter esses serviços. Como
precisamos implantar todos eles nos contêineres individuais.
3- Preocupações com segurança
Na arquitetura monolítica e SOA temos que nos preocupar com apenas um sistema.
Mas esse não é o caso do microsserviço e fica mais fácil ter brechas de
segurança nessa arquitetura.
Como não se comunica com outros serviços, o uso da rede em um monolito é bem menor. Esse baixo tráfego de rede é uma vantagem que pode se perder na migração para microsserviços.
Fazendo algumas considerações
Assim considerando os prós e os contras observe que a maioria das empresas que tiveram sucesso com microsserviços não começou com eles.
Considere os exemplos do Airbnb e do Twitter, que seguiram a rota dos microsserviços depois de superar seus monólitos e agora estão lutando contra suas complexidades. Mesmo empresas de sucesso que usam microsserviços parecem ainda estar descobrindo a melhor maneira de fazê-los funcionar. É evidente que os microsserviços vêm com sua parcela de compensações mas ela tem os seus problemas também.
Pensou em migrar para microsserviços ?
Considere que migrar de um monolito para microsserviços também não é uma tarefa simples, e criar um produto não testado como um novo microsserviço é ainda mais complicado. Os microsserviços só devem ser seriamente considerados após avaliar os caminhos alternativos.
Veja o que observou Martin Fowler sobre usar microsserviços :
1.
Quase todas as histórias de microsserviços de sucesso começaram com um monólito
que ficou muito grande e foi quebrado.
2. Quase todos os casos em que um sistema que foi construído como um sistema de
microsserviço do zero acabou em sérios problemas.
Esse padrão levou muitos a argumentar que você não deve iniciar um novo projeto com microsserviços, mesmo que tenha certeza de que seu aplicativo será grande o suficiente para valer a pena.
O primeiro design raramente é totalmente otimizado. As primeiras iterações de qualquer novo produto são gastas encontrando o que os usuários realmente precisam. Portanto, o sucesso depende de permanecer ágil e ser capaz de melhorar, redesenhar e refatorar rapidamente.
A este respeito, os microsserviços são manifestamente piores do que um monólito. Se você não acertar no design inicial, terá um começo difícil, pois é muito mais difícil refatorar um microsserviço do que um monólito.
Cada software tem
um ciclo de vida e podemos ficar tentados a descartar um monólito porque ele é
antigo e tem sua parcela de complicações. Mas jogar fora um produto que funciona
é um desperdício. Com um pouco de esforço, você poderá extrair mais alguns bons
anos do seu sistema atual.
Há dois momentos em que pode parecer que os microsserviços são o único caminho a
seguir:
Uma razão comum
pela qual os desenvolvedores desejam evitar monólitos é sua propensão a se
deteriorar em um emaranhado de código. É um desafio adicionar novos recursos
quando chegamos a esse ponto, pois tudo está interconectado.
Mas um monólito não precisa ser uma bagunça e podemos optar pela modularização
do monolíto.
A modularização dá muito trabalho, é verdade. Mas também agrega muito valor porque torna o desenvolvimento mais simples. Novos desenvolvedores não precisam conhecer todo o aplicativo antes de começar a fazer alterações. Eles só precisam estar familiarizados com um módulo de cada vez. A modularidade faz um grande monólito parecer pequeno.
A modularização é uma etapa necessária antes da transição para microsserviços e pode ser uma solução melhor do que microsserviços. O monólito modular, como nos microsserviços, resolve o problema da base de código emaranhada dividindo o código em módulos independentes. Ao contrário dos microsserviços, em que a comunicação ocorre em uma rede, os módulos no monólito se comunicam por meio de chamadas de API internas.
A pilha de arquitetura e tecnologia determinará como o monólito pode ser otimizado; um processo que quase invariavelmente começará com modularização e pode alavancar tecnologias de nuvem para dimensionamento como:
Podemos resumir
toda essa discussão sobre a transição para microsserviços em uma frase: não faça
isso a menos que tenha um bom motivo. As empresas que embarcam na jornada para
microsserviços despreparadas e sem um design sólido terão um tempo muito
difícil. Você precisa atingir uma massa crítica de cultura de engenharia e
conhecimento de dimensionamento antes que os microsserviços sejam considerados
uma opção.
Enquanto isso, por que mudar se o seu sistema está funcionando bem e você ainda
está desenvolvendo recursos em um ritmo decente?
Assim estes
argumentos não tem o objetivo de desencorajá-lo a usar microsserviços mas a
pensar bem e ter muita cautela para não embargar na onda para mostrar que seu
sistema esta atualizado.
E estamos
conversados ...
"E é evidente que pela
lei ninguém será justificado diante de Deus, porque o justo viverá pela fé."
Gálatas 3:11
Referências: