É quase impossível falar e entender a arquitectura de micro serviços sem antes abordar sobre os paradigmas arquitectónicos antecessores, afinal, micro serviço resulta de problemas enfrentados nos paradigmas de arquitectura Monolítica e SOA (Arquitectura orientada a eventos).
Vale ressaltar que esses paradigmas não são péssimos, apenas existem cenários que não se aplicam ou que se forem aplicados podem resultar em grandes problemas.
Na arquitectura monolítica temos todo código necessário para implementação da aplicação numa única base de código. Uma aplicação monolítica contém a implementação de todas as funcionalidades de uma aplicação e faz-se deploy de aplicação como única e única.
Os sistemas começam pequenos, porém ao longo do tempo, eventualmente crescem para suprir as necessidades dos clientes ou usuários. Deste modo, dado ao crescimento dos sistemas, surgem alguns problemas normalmente enfrentados, tais como:
- As partes individuais da aplicação não podem ser escalonadas de forma independente, devido ao acoplamento elevado;
- Torna-se difícil manter o código;
- Testar fica cada vez mais complexo;
- Não há flexibilidade de linguagens de programação, obrigando a usar a linguagem que foi escolhida logo de início;
- Para cada alteração feita é necessário fazer novo deploy de toda aplicação;
- Uma falha pode afectar toda aplicação.
Dado a existência destes desafios ou problemas, surge uma nova arquitectura denominada Micro serviços, a fim de resolver problemas enfrentados. O termo micro serviços surgiu em Maio de 2011 durante uma conferência de arquitectos de software para representar um estilo de arquitectura de sistemas.
A proposta da arquitectura orientada a micro serviços é desenvolver sistemas que sejam mais flexíveis, escaláveis e com manutenção mais simples do que as arquitecturas de sistemas monolíticos, que normalmente são utilizadas.
Portanto, a principal filosofia desta arquitectura é “fazer uma coisa é fazê-la bem”, por isso os serviços são focados em realizar uma única função.
Como funciona os Micro serviços?
O objectivo dos micro serviços é criar uma colecção de pequenos micro serviços autónomos ou independentes e desacoplados que implementam apenas uma única funcionalidade do sistema. De uma forma análoga, podemos comparar micro serviços a estrutura de uma equipa de futebol em que se um jogador estiver lesionado não coloca toda a equipa em risco, ou por outra, a equipa consegue levar o jogo adiante.
Nesta perspectiva um único micro serviço contém uma base de código (roteamento, middlewares, lógica de negócio e base de dados) para implementar uma única funcionalidade. Um micro serviço contém todo código necessário para fazer uma funcionalidade funcionar correctamente, e esta é a diferença entre micro serviços de monolítico.
Assim sendo, esta diferença permite as seguintes funções:
- Escolher o melhor stack para implementar uma funcionalidade( não se é mais refém de uma única linguagem de programação);
- Flexibilidade na escolha de linguagem de programação;
- Testar funcionalidade de forma independente;
- Deploys independentes (ao efectuarmos alterações não é necessário fazer deploy de todos serviços novamente, apenas dos serviços alterados);
- Resiliente a falhas (se um micro serviço vai abaixo, nem todo sistema será afectado);
- Fácil manutenção;
- Fraco acoplamento.
Claro que apesar de ter muitas funções e benefícios, uma arquitectura de micro serviços não resolve todos problemas pois tem suas limitações, tais como:
- Gerenciamento de dados entre micro serviços:
Cada micro serviço deve acessar e ter sua própria base de dados (se for necessário), pois um micro serviço não deve acessar directamente na base de dados de outros micro serviços. A existência de uma base de dados para cada micro serviço possibilita que cada serviço corra independentemente de outros serviços, pois alguns micro serviços são mais eficientes e com base de dados específica (SQL vs Nosql), e assim, sem uma base de dados centralizada, evita-se desafios na escalabilidade.
- Comunicação entre micro serviços:
Existem dois tipos de comunicação entre micro serviços: comunicação síncrona (um micro serviço comunica directamente ao outro através de uma requisição usando protocolo http) e comunicação assíncrona (um serviço comunica-se com outro através de eventos, ou seja, os serviços envolvidos não se comunicam directamente, enviam mensagens para um agente intermediário de mensagens que outros serviços assinam ou subscrevem.
Por isso, sendo a VOID – tecnologia e comunicação uma empresa inovadora neste campo, optamos sempre por usar uma abordagem de micro serviços no desenvolvimento dos nossos produtos (aplicações web) com o objectivo de ter maior produtividade e proporcionar melhor qualidade nos nossos serviços.