Microservices após o hype – O que é? Qual a motivação? E eu realmente preciso disso? – Parte 03
Nesta série de artigos, discutimos o que são microservices, as suas vantagens e limitações. Caso você ainda não tenha lido os artigos anteriores, basta ir até a Parte 01 e Parte 02.
Neste último artigo, de uma série de três, vamos discutir se precisamos mesmo de microservices. Também iremos discutir como dar início a uma implementação ou restruturação de uma arquitetura para a arquitetura baseada em microservices.
5) Precisamos de microservices?
O fundamento da abordagem SOA é manter controle da organização e da complexidade do negócio distribuindo-os.
Quando se separa projetos de software, a complexidade é reduzida em alguns pontos. Porém, em contrapartida, há um custo extra em alguns outros pontos, como ter um sistema distribuído.
É possível ter um monolítico organizado, escalável, possível de evoluir, mas isso irá requerer muita disciplina durante o tempo todo.
A arquitetura de microservices, quando implementada no ambiente errado, poderá trazer somente desvantagens. No final, pode-se ter uma arquitetura pior do que a convencional.
Então, primeiro, é necessário responder as seguintes perguntas antes de adotar microservices:
- Você tem problemas os quais a arquitetura de microservices resolveria?
- No seu ambiente de trabalho, há todos os requisitos necessários para se adotar uma arquitetura de microservices?
E não esqueça que uma arquitetura é uma ferramenta que nós usamos e não um dogma que temos de seguir indiscutivelmente. Se uma solução híbrida for melhor para seu contexto, adote alguns dos conceitos relacionados a microservices para alguns casos e não para outros.
6) Como faço para chegar lá?
Uma vez decidido pela arquitetura de microservices, precisa-se encontrar uma maneira de começar.
Não há bala de prata, mas algumas abordagens destacam-se.
Nível difícil: a partir do zero
A situação mais atrativa é criar um novo sistema do zero, sem nenhum impedimento tecnológico.
Infelizmente, construir microservices do zero é a situação mais complicada:
- É complicado determinar os limites nos quais os diferentes projetos estarão delimitados, pois ainda não é claro como os sistemas irão evoluir;
- Como já foi dito, as evoluções tem custo elevado devido ao refactoração transversal de projetos
Nível fácil: uma interface para um monolítico
Um caso mais simples é reestruturar um monolítico. A partir de uma revisão da atual organização e estrutura do monolítico, faz-se os cortes nos sistemas para criar os microservices.
O objetivo não é cortar o projeto e diversos pequenos projetos, mas:
- Uma, ou no máximo algumas, aplicações centrais ("core") consistentes entre si;
- Ter microservices que estarão em fase de ajuste, alguns poderão ser realocados ou removidos.
Para quebrar um monolítico, deve-se agrupar os módulos funcionais de maneira consistente e transfomá-los em projetos.
Esta operação é facilitada quando tem-se aplicações bem estruturadas em camadas técnicas, blocos de negócios e organizada. As melhores práticas de desenvolvimento permitem ter um monolítico que está pronto para ser convertido em microservices. Do contrário, será necessário atividades de investigação para entender melhor o contexto da aplicação e como delimitá-lo.
A automação de testes é essencial para limitação dos riscos. Sem testes, é necessário considerar a aplicação como um legado e usar as técnicas apropriadas para remover o débito técnico.
Antes de iniciar o processo de "cortes" de um monolítico, é necessário entender a estrutura dos dados e como os dados estão distribuídos pelos diversos domínios funcionais.
Finalmente, é importante não ser dogmático com relação a essa abordagem. Se, no decorrer da evolução de um negócio, projetos que antes eram distintos passarem a convergirem, o correto é fazer o "merge" desses projetos. Isso não implica em uma falha na abordagem de microservices, mas uma maturidade da plataforma, que é capaz de se adaptar às mudanças de negócio.
Chegamos ao fim da nossa série de artigos. Se você não leu os artigos anteriores, basta acessá-los nestes links, parte 01 e parte 02.
Você já utiliza a arquitetura de microservices em seu trabalho? Teve quais dificuldade? Quais foram os aprendizados até o momento? Seu comentário é bem-vindo.