Introdução a Microsserviços

Daniel Gomes
introducao-a-microsservicos
6 min readJun 23, 2019

Objetivo

Este artigo tem como objetivo, auxiliar no entendimento do conceito de microsserviços e sua arquitetura.

Introdução

O termo “microservices” descreve um novo estilo de desenvolvimento que cresceu a partir de tendências recentes práticas de desenvolvimento / gerenciamento de software.

Métodos ágeis, cultura DevOps, nuvem, containers e a adoção de integração contínua /entrega contínua. Sendo assim, tornando possível a construção de de serviços otimizados em grande escala.

O que são Microsserviços ?

Microsserviços envolvem uma abordagem arquitetônica que enfatiza a decomposição de aplicações em propósito, serviços altamente coesos e fracamente acoplados geridos por equipas multifuncionais, para implantar e manter sistemas de software complexos com a velocidade e a qualidade exigida pelos negócios de hoje.

Microsserviços lidam com linguagens, plataformas e sistemas operacionais de forma agnóstica. Eles podem ser usados ​​para quebrar um grande aplicação monolítica em serviços menores e mais simples. Cada microserviço faz uma coisa, e faz bem, então o “Micro” em microsserviços refere-se ao escopo dos serviços funcionalidades, não o número de linhas de código e nem do tamanho em megabytes do monólito.

Em resumo o conceito básico: ele é uma pequena aplicação que executa uma única tarefa e o faz com eficiência. Um microserviço è um pequeno componente que pode ser facilmente substituído e é desenvolvido e implantado de forma indepedente.

Cada microsserviço é geralmente construído por uma equipe completa, que reduz possíveis dificuldades de comunicação entre equipes diferentes.

Os microsserviços podem não ser adequados para aplicações mais simples e são mais adequados para aplicações complexas que crescem ao longo de um período de tempo, com grandes bases de código e equipes. Os microsserviços são ideais para realizar múltiplas funções de negócios, com cada microsserviço focado em realizar uma única função ou sub-função de negócios.

A frequência com que um aplicativo precisa ser atualizado, e o retorno rápido que é possível usando um design de microsserviços, são alguns dos principais fatores que estilo de arquitetura.

O conceito por trás dos microsserviços é semelhante ao Arquitetura Orientada a Serviço(SOA) e é por isso que esse estilo de arquitetura tem sido chamada de “SOA com DevOps” “SOA para Hipsters” e “SOA 2.0: Microservices”

Princípios dos microsserviços

O comportamento e os padrões de uma arquitetura microservice e seis princípios abaixo, também defendidos por Rag Dhiman[8,9].

1. Alta Coesão

Um dos princípios da arquitetura de microsserviços é a alta coesão, o serviço deve ter um único foco. Ou seja, ter uma única responsabilidade do domínio da aplicação. Este princípio é útil para controlar o tamanho e impedir que o microsserviço se torne um serviço monolítico.

2. Autônomos

Um microserviço deve ser autônomo, ou seja, não deve depender de outros serviços que interajam com ele. Isto implica na mudança de um microserviço dentro de uma aplicação. Ele não deve forçar que outros microsserviços necessitem mudar. O ponto importante desse princípio reflete que cada microserviço deve ter seu próprio banco de dados ou outro serviço de armazenamento.

3. Resiliência

Não importa a velocidade e os custos das soluções, é importante construir sistemas que reajam a falhas inesperadas. Ser capaz de validar os dados recebidos (mesmo que estes estejam corrompidos) e tratar a perda ou falha na comunicação com outro serviço da cadeia, sem quebrar o fluxo da aplicação.

4. Observável

Poder acompanhar o status do sistema e conseguir observar o que está acontecendo em tempo real. Esse tipo de monitoramento precisa ser centralizado para facilitar a busca de informações sobre o status atual do sistema. Como microsserviços é uma arquitetura distribuída, a ideia de centralizar o monitoramento, principalmente os logs, facilita verificação do ciclo completo de toda mensageria trocada. Desde a primeira iteração do usuário até a solução entregue pela aplicação.

5. Automatização

Com a divisão de uma aplicação entre diversos mini blocos há uma necessidade maior de automatizar algumas tarefas para manter este tipo de arquitetura. Como integração contínua e entrega contínua. Esse é um dos aspectos que fazem esse modelo ser abraçado por defensores da cultura DevOps. Pois esta é a ideia principal que move essa cultura.

6. Centrado no domínio do negócio

Um microserviço deve estar focado no domínio do negócio. Assim sendo, deve ser uma função do negócio. Quem conhece o padrão de desenvolvimento DDD sabe que o domínio é o coração de uma aplicação. O conceito base que alicerça este pensamento é o que no DDD chamamos de Bounded Context (ou contextos delimitados). Os contextos delimitados servem para refatorar um grande domínio em pequenos conjuntos de domínios que unidos representam o modelo de negócio de uma aplicação. E é exatamente essa característica um dos pontos fundamentais no modelo de microsserviços.

Beneficios de Microsserviços

Escala Independente

Cada microsserviço pode escalar independentemente via eixo X escalonamento (clonagem com mais CPU ou memória) e eixo Z dimensionamento (fragmentação), com base no que é necessário. Isto é muito diferente das aplicações monolíticas, que podem ter requisitos muito diversos, mas ainda devem ser implantados juntos como uma única unidade.

Atualização Independentes

Cada serviço pode ser implantado independentemente de outros serviços. Qualquer alteração local em um serviço pode ser feita facilmente por um desenvolvedor sem exigir coordenação com outras equipes. Por exemplo, para atender negócios em constante mudança requisitos, um serviço pode ser melhorado substituindo o implementação anterior. Como resultado, isso melhora a agilidade do microserviço. Este também é um ótimo facilitador de Integração Continua / Entrega Continua.

Manutenção Fácil

O código em um microsserviço é restrito a um recurso e com isso mais fácil de entender. IDEs podem carregar menores quantidades de código e com menos código, aumenta a facilidade do desenvolvedor da manutenção.

Tecnologia poliglota

Os desenvolvedores são livres para escolher a linguagem e a pilha tecnologica mais adequada para construção do serviço. Eles são livres para inovar dentro do limites de seu serviço. Isso permite reescrever o serviço usando novas tecnologias, em vez de ter que manter decisões passadas, dando assim a liberdade de escolha de tecnologias, ferramentas ou estruturas.

Isolamento de falhas e recursos

Um serviço mal comportado, como um “memory leak” ou uma falta de gerenciamento do pool de conexões de banco de dados, pode afetar o serviço por completo, caso a aplicação tiver arquitetura monolítica. Com microsserviços bem projetados, as falhas podem ser isoladas em um único serviço e não se propagam para o resto do sistema, permitindo um isolamento de falhas que comprometem a aplicação por completo.

Melhor comunicação entre equipes

Um microsserviço é normalmente construído por uma equipe que domina a pilha tecnológica por completo. Todos membros relacionados a um domínio trabalham juntos em uma única equipe,o que melhora significativamente a comunicação entre os membros da equipe, como eles compartilham os mesmos objetivos finais, entregam o serviço no ambiente de produção.

Monitoramento de serviços

Um dos aspectos mais importantes de um sistema distribuído é o monitoramento e registro de serviços. Isso permite que você tome ação proativa se, por exemplo, um serviço estiver consumindo recursos inesperados. Agregar logs de diferentes microsserviços e fornecer uma visualização consistente. Fazer com que os dados disponíveis para usuários corporativos.

Resiliência

Falha de software irá ocorrer, não importa o quanto se testa. Isto tão importante quanto múltiplos microsserviços são distribuídos por toda a Internet. A questão é “como evitar a falha”, mas “como lidar com falha. “É importante que os serviços tomem ação corretiva para garantir que a experiência do usuário não seja afetada.

O padrão “Circuit Breaker” permite construir resiliência em software — o Hystrix da Netflix é uma boa biblioteca que implementa esse padrão.

Devops

Integração Contínua e Implantação Contínua (IC / EC) são muito importantes para que os microsserviços possam ter sucesso. Essas práticas são necessárias para que os erros possam ser identificados, cedo por meio de testes automatizados e pipelines de implantação.

Conclusão

O estilo arquitetônico de microsserviços é bem conhecido pelas vantagens e pode certamente ajudar o seu negócio a evoluir mais rapidamente.

Mas os monólitos nos serviram bem e continuarão a servir.

Considere os requisitos operacionais dos microsserviços além dos benefícios antes de refatorar seu monólito para

uma arquitetura de microsserviços.

Referência

[1] https://en.wikipedia.org/wiki/Law_of_Demeter

[2] https://dzone.com/articles/what-is-microservices-an-introduction-to-microserv?oid=facebook

[3] https://dzone.com/articles/moving-to-microservices?oid=facebook

[4] https://dzone.com/articles/microservices-basics

[5] https://softjourn.com/blog/microservices-effective-design/

[6] https://www.thoughtworks.com/pt/insights/blog/microservices-nutshell

[7] http://www.pedromendes.com.br/2016/01/02/microservicos/

[8] https://www.mundipagg.com/blog/alta-escalabilidade-com-microservicos/

[9] Zeev Avidan and Hans Otharsson, Accelerating the Digital Journey from Legacy Systems to Modern Microservices.

--

--