InícioNuvemIntegraçãoDefinição dos microsserviços e sua importância na arquitetura de software.

Definição dos microsserviços e sua importância na arquitetura de software.

Date:

Os microsserviços quebram o código monolítico em partes menores e independentes, simplificando sua manutenção. Abaixo, apresentamos uma análise dos benefícios e desvantagens de migrar para uma arquitetura de microsserviços.

Person holding the building blocks of a microservices architecture
Imagem: JonPauling/StockVault

A maioria dos sistemas de computador realiza múltiplas tarefas utilizando recursos compartilhados. Um dilema constante na programação de computadores é determinar o nível de conexão entre os trechos de código responsáveis por essas tarefas. Uma solução para isso é a abordagem de microserviços, que envolve componentes independentes de funcionalidade que se comunicam entre si para formar um sistema completo, sendo cada um desses componentes denominado microsserviço.

Apesar de não ser uma novidade, os microserviços tornaram-se amplamente adotados como uma estrutura ideal para aplicações em nuvem. Essa arquitetura também está alinhada com a abordagem devops, promovendo a implementação ágil e contínua de novas funcionalidades.

Neste artigo são abordados os microsserviços, destacando as vantagens e desvantagens da transição para essa arquitetura específica.

Qual é a definição de microsserviços?

O termo “micro” em microserviços sugere aplicações pequenas, porém é mais apropriado considerá-los do tamanho necessário para realizar uma função específica ou resolver um problema conceitual, e não técnico. De acordo com a documentação do Microsoft Azure, os microserviços devem ser estruturados em torno de recursos de negócios, em vez de camadas horizontais como acesso a dados ou mensagens.

Os microsserviços se comunicam uns com os outros e com usuários externos por meio de APIs que são relativamente estáveis, a fim de construir aplicações maiores. Dessa forma, é possível ajustar ou atualizar a funcionalidade interna de um microsserviço individual sem afetar o restante do sistema. A divisão das funções específicas de uma aplicação maior em partes de código independentes facilita a criação de pipelines CI/CD (integração contínua e entrega contínua) no âmago das práticas de devops. Além disso, APIs bem definidas fazem com que os microsserviços sejam mais simples de testar automaticamente.

O que caracteriza uma arquitetura de microsserviços?

Frequentemente, você vai encontrar menções aos microsserviços em relação a uma estrutura arquitetônica específica. Essa expressão engloba não somente os próprios microsserviços, mas também a infraestrutura requerida para sustentá-los.

  • Componentes automatizados são utilizados para controlar e encontrar serviços, assim como para garantir a continuidade e a capacidade de recuperação. Vamos falar sobre algumas das plataformas mais conhecidas para essas finalidades brevemente.
  • Uma maneira fácil de direcionar trocas de informações entre diferentes serviços.
  • Um gateway de API que gerencia a comunicação entre microsserviços e o ambiente externo.

O objetivo primordial é criar uma estrutura que seja robusta diante de falhas e possa se adaptar para atender às necessidades em constante mudança sem necessidade de uma reformulação integral.

Comparação entre Microservices e arquitetura monolítica.

Antes da adoção dos microsserviços, utilizávamos exclusivamente um tipo de arquitetura conhecido como monolítica. Esse termo se refere a um sistema em que todo o código é armazenado em um único arquivo executável binário.

A arquitetura monolítica tem sua utilidade. Embora uma aplicação monolítica seja tipicamente mais desafiadora de escalar e aprimorar em comparação com os microserviços, ela também demanda menos gerenciamento. Além disso, as aplicações monolíticas são mais simples em relação ao armazenamento de dados. Em contraste, os componentes individuais em uma arquitetura de microsserviços normalmente são responsáveis por persistir seus próprios dados, resultando em cada microsserviço necessitando de seu próprio banco de dados. Por outro lado, uma aplicação monolítica utiliza apenas um banco de dados para todas as suas operações de dados.

Qual é o significado de ‘microserviço’?

Vamos retomar o ponto que fiz anteriormente sobre a necessidade de os microserviços desempenharem uma função específica. Embora seja fácil dizer isso, a elaboração dessas divisões funcionais é mais complexa do que parece. A análise de domínio e o design orientado para o domínio são abordagens teóricas que podem ajudar a decompor tarefas de alto nível em problemas individuais que podem ser resolvidos por um microserviço. A Microsoft publicou uma série de postagens em blogs que explicam esse processo. Um dos primeiros passos é criar um modelo abstrato do seu domínio de negócios, o qual pode ser utilizado para identificar os contextos específicos nos quais as funcionalidades podem ser agrupadas.

VEJA TAMBEM:  O Microsoft Fabric passa de um simples repositório de dados para se tornar uma plataforma de aplicativos em constante evolução.

Pense em um pedido de entrega como ilustração. Um item tangível teria um custo e um local de entrega, o que implica em diferentes contextos para cobrança e transporte. Cada microsserviço que você desenvolve deve operar exclusivamente dentro de um contexto específico, embora seja possível que um contexto abranja mais de um microsserviço.

Comparação entre microservices e SOA e serviços na web.

Se você está familiarizado com a ideia de pequenos programas que colaboram entre si, pode se lembrar da arquitetura orientada a serviços (SOA) e dos serviços web, termos populares durante a era da web 2.0 nos anos 2000. Embora não haja nada completamente novo nessa abordagem, existem diferenças significativas entre elas.

  • Comparação entre SOA e microsserviços: Em uma arquitetura orientada para serviços, os componentes individuais têm um nível de acoplamento relativamente baixo, frequentemente compartilhando recursos como armazenamento e se comunicando por meio de um software especializado denominado um barramento de serviços empresariais. Por outro lado, os microsserviços são mais autônomos, compartilham menos recursos e se comunicam por meio de protocolos mais leves. Os microsserviços são às vezes vistos como uma variação da SOA ou como uma evolução do conceito de SOA.
  • Paráfrase: Serviços Web e microserviços têm diferenças em sua forma de conexão e interação. Enquanto os serviços web são conjuntos de funcionalidades acessíveis por outros aplicativos via web, como o Google Maps incorporado em sites para oferecer direções aos usuários, os microserviços são mais interconectados e integrados entre si em comparação com os serviços web.

Como ocorre a comunicação entre os microserviços

Frequentemente se menciona que arquiteturas de microservices devem ter endpoints inteligentes e tubos burros, ou seja, os microsserviços devem utilizar métodos de comunicação simples e consolidados.

De modo geral, a troca de informações entre microservices é preferencialmente feita de forma assíncrona, evitando que os processos fiquem bloqueados aguardando por respostas. Embora protocolos síncronos como o HTTP ainda sejam úteis, é comum também utilizar protocolos assíncronos como o AMQP (Advanced Message Queuing Protocol). Esse tipo de conexão solta torna a arquitetura de microserviços mais flexível, permitindo lidar de forma mais eficiente com falhas em componentes individuais ou na rede.

Vantagens e desvantagens dos microserviços.

Agora que você entende a estrutura dos microsserviços, vamos resumir algumas das vantagens mais importantes que eles proporcionam:

  • No desenvolvimento de microservices, cada componente de serviço tem seu próprio ciclo de desenvolvimento e atualização, permitindo avanços incrementais no aplicativo, recurso por recurso, em vez de exigir atualizações massivas. Esse método de desenvolvimento viabiliza as práticas de devops e CI/CD.
  • Paráfrase: O conceito de separação de preocupações é um princípio importante no design de sistemas de computação. Ao encapsular diferentes funcionalidades em microsserviços individuais, torna-se mais simples manter e compreender esses serviços. Além disso, a separação entre os serviços permite a utilização de diferentes linguagens de programação em partes distintas de uma mesma aplicação, facilitando a resolução de problemas específicos. Essa abordagem também facilita a identificação e resolução de falhas no sistema.
  • Reformulação: Se há a necessidade de expandir algum componente da sua aplicação, uma arquitetura baseada em microserviços possibilita essa escalabilidade de forma mais eficiente, evitando a necessidade de modificar todo o código. As ferramentas de orquestração de serviços podem gerenciar esse processo de expansão, criando múltiplas instâncias de um serviço conforme necessário ou transferindo-o para um hardware mais potente.
  • Paráfrase: A reutilização de um serviço desenvolvido para uma aplicação pode ser benéfica para projetos futuros, e a formação de uma biblioteca com esses serviços pode agilizar a criação de novos produtos.
  • Integração de serviços externos: Por meio de APIs padronizadas, os microserviços podem se comunicar e permitir a integração de serviços de terceiros, sejam eles comerciais ou de código aberto, em sua aplicação.
VEJA TAMBEM:  AWS está ampliando as integrações zero-ETL disponíveis para o Amazon RedShift.

Existem também obstáculos relacionados aos microsserviços:

  • Complexidade arquitetônica: Um sistema de microsserviços distribuído possui várias partes móveis. Ferramentas automatizadas de orquestração, como o Kubernetes, podem simplificar parte da gestão. Por outro lado, essas ferramentas costumam apresentar uma alta complexidade de aprendizado.
  • Reescrita: Os desafios de desempenho surgem quando se utiliza um sistema de comunicação por API, que, embora flexível e simples de desenvolver, não é tão veloz quanto a comunicação entre processos dentro de um único programa monolítico. Por outro lado, uma plataforma de orquestração é uma infraestrutura robusta por si só. Embora as aplicações possam se beneficiar da facilidade de desenvolvimento, a pressão adicional sobre os recursos de computação pode resultar em impactos negativos.
  • Paráfrase: Separar as preocupações pode ser desafiador, pois, embora um sistema de microsserviços ideal deva ser composto por microsserviços distintos, na realidade, a situação não é tão clara, especialmente se houver restrições de tempo ou recursos durante o desenvolvimento da aplicação. Isso pode levar à implementação de funcionalidades semelhantes em diferentes serviços, com equipes diferentes trabalhando em paralelo. Além disso, algumas transações de negócios podem envolver múltiplos serviços, exigindo coordenação entre várias equipes de desenvolvimento.
  • Preocupações de segurança: Para um hacker malicioso, um binário monolítico é uma caixa opaca com um funcionamento interno complexo de compreender e atacar. Por outro lado, uma arquitetura de microsserviços amplia a superfície de ataque, permitindo, por exemplo, a interceptação e modificação de chamadas de API em trânsito.
  • Reformulação: A adoção de CI/CD e devops é comum em muitas empresas, mas ainda existem lojas que não seguem essas práticas. A transição para os microsserviços representará uma significativa mudança para essas organizações e desenvolvedores, podendo trazer benefícios a longo prazo, embora cause perturbações no curto prazo.

Vantagens e desvantagens adicionais dos microservices

Veja as vantagens e desvantagens de utilizar microservices, conforme apresentado no InfoWorld: Benefícios da adoção da arquitetura de microsserviços e Os aspectos negativos da arquitetura de microservices.

Design Patterns for Microservices

Independentemente do idioma utilizado no desenvolvimento de microsserviços, é provável que você enfrente desafios já enfrentados por outros desenvolvedores. Os padrões de design são soluções formais e abstratas para problemas comuns na área da computação, sendo que alguns deles são direcionados especificamente para microsserviços. A plataforma Devopedia conta com uma extensa lista desses padrões.

  • Registro de serviço: Com o objetivo de ligar os usuários às instâncias ativas de microserviços.
  • Disjuntor: Com o intuito de impedir chamadas repetitivas de serviços que falharam.
  • Fallback: Por oferecer uma opção quando um serviço não funciona corretamente.
  • Sidecar: Com o objetivo de oferecer suporte adicional ao recipiente principal, como por exemplo para realizar registros, sincronizar serviços ou monitorar.
  • Adaptador: Utilizado para uniformizar a conexão entre o recipiente principal e o ambiente externo.
  • Embaixador: Serve como intermediário para estabelecer conexões entre o recipiente principal e o mundo exterior, facilitando conexões de host local com o exterior.
VEJA TAMBEM:  Procedimentos, interfaces de programação de aplicativos e diretrizes.

Utilizando Docker e Kubernetes para implementar arquitetura baseada em microserviços.

A tecnologia que mais tem avançado para popularizar os microservices é a dos recipientes. Enquanto uma máquina virtual inclui um sistema operacional completo, um recipiente é apenas um ambiente isolado que utiliza o kernel do sistema operacional hospedeiro, mantendo o código executando dentro dele de forma independente. Os recipientes são mais compactos que as máquinas virtuais, podem ser implantados rapidamente tanto localmente quanto na nuvem, e podem ser dimensionados conforme a demanda e os recursos disponíveis.

Paráfrase: A utilização de recipientes para microsserviços é uma prática evidente, onde cada microsserviço pode ser executado de forma isolada em seu próprio recipiente, o que ajuda a diminuir a complexidade na gestão dos serviços. A maioria das plataformas de contêineres oferece ferramentas de orquestração que automatizam tarefas como implantação, gerenciamento, dimensionamento, rede e garantia de disponibilidade para aplicações que estejam baseadas em contêineres. A combinação de microsserviços pequenos e simples de construir com recipientes fáceis de utilizar é o que possibilita a implementação da filosofia DevOps.

Há diversas versões do conceito de recipiente, no entanto o mais amplamente utilizado é o Docker, frequentemente combinado com o Kubernetes como uma plataforma de gestão.

Os sistemas baseados em contêineres possuem a capacidade de suportar qualquer linguagem de programação compatível com o sistema operacional, o que proporciona flexibilidade aos desenvolvedores. Uma das principais vantagens dos microsserviços é a possibilidade de escrever cada serviço em diferentes linguagens, permitindo até mesmo reconstruir um serviço em uma nova linguagem sem impactar o sistema como um todo, desde que suas APIs permaneçam estáveis. Essa abordagem pode ser mais atrativa do que o uso de plataformas como a Spring Cloud, que tem sua base na linguagem Java. No entanto, é importante destacar que essa não é a única opção, pois a Spring Cloud também pode ser integrada com o Kubernetes.

Implementação de microsserviços utilizando as plataformas da AWS e Azure.

As vantagens de utilizar containers incluem a facilidade de serem implementados na nuvem, onde recursos de computação flexíveis estão disponíveis para otimizar a eficiência de sua aplicação. Os principais provedores de nuvem pública estão interessados em que você utilize suas plataformas para rodar seus aplicativos baseados em microserviços. Para mais detalhes, consulte as ofertas dos principais provedores de nuvem como Amazon, Microsoft e Google.

Debería cambiar a la arquitectura de microsservicios?

Pode ser interessante analisar o que será necessário para transferir sua base de código atual para uma arquitetura de microserviços. Em muitos aspectos, a migração da funcionalidade existente pode ser mais complexa do que iniciar do zero com uma nova aplicação baseada em microserviços. Uma vantagem é que, devido à natureza dos microserviços, não é preciso realizar todas as mudanças de uma vez. É possível desenvolver serviços individuais que correspondam a partes da funcionalidade da aplicação monolítica anterior, mantendo o restante intacto.

Sugiro consultar o guia do InfoWorld, intitulado “Como iniciar com microsserviços baseados em eventos”, para aprender mais detalhes sobre a migração mencionada, incluindo dicas valiosas. Desejo sucesso em sua trajetória!

DEIXE UMA RESPOSTA

Por favor digite seu comentário!
Por favor, digite seu nome aqui