Tecnologia

O que são Microsserviços e no que eles se diferem da Arquitetura Monolítica?

14/04/20 por Rodrigo Brito

Se você está inserido na área de tecnologia da informação ou engenharia de software já deve ter escutado o termo arquitetura de microsserviços e provavelmente já se perguntou se é uma boa estrutura para ser aplicada na sua solução. Acompanhe esse texto e entenda como funciona a arquitetura de microsserviços e suas diferenças em relação a tradicional arquitetura monolítica.

O que é a Arquitetura Monolítica?

A arquitetura monolítica é uma arquitetura de desenvolvimento de sistema de software. Por ser uma estrutura tradicional, é mais conhecida e utilizada em soluções aplicadas no mercado. Essa abordagem de estrutura de sistemas é baseada no princípio de que todos os processos dentro de uma mesma solução são altamente acoplados, dependentes, compartilham de uma única base de dados e executam todos os processos como se fosse um único serviço. 

Por se tratar de um único sistema que reúne todas as aplicações e informações em um único banco de dados, o seu gerenciamento se torna mais simples e depende exclusivamente de uma única equipe. Porém, esse mesmo fator dificulta a escalabilidade do sistema, se houver um pico de demanda em uma determinada aplicação, todo o sistema terá que ser escalado. Outro ponto para se destacar na arquitetura monolítica é que ao longo do tempo a complexidade da atualização ou aplicação de um recurso do sistema se torna mais complicada, por conta da alta concentração no número de dados. 

Imagine o aplicativo do seu banco. Nele existem diversas funcionalidades, como: transferências, pagamentos, investimentos, entre outros. Em um sistema de arquitetura monolítica todas estas funcionalidades e seus processos estão altamente acoplados, utilizando o mesmo banco de dados. Dessa forma, todas as funções do sistema estão implementadas em um único processo e caso seja necessária realizar uma atualização ou aplicação em uma única funcionalidade do sistema, todo o aplicativo precisaria sair do ar.

O que é a Arquitetura de Microsserviços?

A arquitetura de microsserviços surgiu nos últimos anos para desmembrar e sanar alguns dos problemas enfrentados pela arquitetura monolítica. Este modelo é desenvolvido através de um sistema que consiste, basicamente, em construir pequenos serviços independentes que são criados para recursos específicos, em que cada um realiza uma única função independente. 

Os serviços se comunicam por meio de API's bem definidos, porém que não necessariamente compartilham da mesma tecnologia, biblioteca estrutural ou arquitetural. Eles são desmembrados em componentes mínimos e utilizam seu próprio banco de dados.

Como cada serviço é independente, eles podem ser desenvolvidos, atualizados, implementados e escalados de forma individual para atender a uma demanda ou função específica de uma solução maior.

Imagine novamente o aplicativo do seu banco, com as mesmas funcionalidades citadas acima, porém desenvolvido através de uma arquitetura de microsserviços. Nesta situação, as transferências, pagamentos, investimentos e outras funcionalidades seriam estruturadas independentes, desenvolvidas para cumprir exclusivamente suas finalidades específicas, com seu próprio banco de dados. 

Caso seja necessária realizar a manutenção de uma dessas operações, utilizando um controle de inversão e monitoramento adequado, as outras funcionalidades do aplicativo continuarão disponíveis para uso normalmente.

Alguns dos benefícios de utilizar a arquitetura de microsserviços em um sistema são:

  • Agilidade: como são implementados de forma independente é mais fácil gerenciar a correção de problemas, lançamentos, manutenção ou desenvolvimento de um outro recurso;

  • A base de código é pequena: isso dá a possibilidade da equipe escolher a tecnologia mais adequada para cada serviço; 

  • Isolamento de falhas: é possível realizar a correção de falhas não interrompendo o funcionamento da solução inteira;

  • Escalabilidade: É possível dimensionar um serviço de forma independente, permitindo a expansão somente do serviço que precisa de mais recursos;

  • Isolamento de dados: é mais fácil executar atualizações pequenas em um único banco de dados de um serviço específico;

Porém, trabalhar com uma solução que pode ter inúmeros serviços tem seus desafios, vejamos alguns:

  • Complexidade: A arquitetura de micro serviços possui mais partes móveis, cada serviço é mais simples, mas o sistema como um todo acaba sendo mais complexo. Então, é preciso ter um gerenciamento eficiente para que o serviço como um todo tenha sucesso;

  • Desenvolvimento e teste: procedimentos que utilizem muitas dependências de serviços exigem um tipo de abordagem diferente, testar uma aplicação com muitas dependências de serviço se torna uma tarefa desafiadora;

  • Falhas de rede: Pois o uso de serviço pode aumentar a latência de resposta a quem utiliza esse serviço;

  • Controle de inversão: as atualizações do serviço não podem interromper o funcionamento dos outros serviços e nem a solução completa;

  • Gerenciamento de dados armazenados: como a natureza dos microsserviços é de gerar dados de forma independente, isso dificulta seu gerenciamento pelo microsserviço. Um estudo da Global Microservices aponta que 17% das equipes que utilizam a arquitetura de microsserviços não têm o conhecimento do gerenciamento desses dados a longo prazo. Por isso, é importante planejar de forma sólida as API’s. 

Geralmente, cada serviço é composto por uma pequena equipe de profissionais que trabalham com autonomia. Por esse motivo, é extremamente importante que haja um gestor que faça a integração de todos os serviços e unifique a equipe para que todos os envolvidos em um projeto estejam alinhados com o sistema. É importante também que a equipe que trabalha com esse sistema esteja comprometida tecnicamente.

Utilizar a arquitetura de microsserviços é mais custoso e exige uma integração de processos, em especial, a Integração Contínua, e para que isso aconteça é importante que se implemente uma Cultura de DevOps, assim o controle sobre todo o software será maior. Na arquitetura de microsserviços a preocupação com o Build deve ser redobrada, os testes dos softwares devem ser muito mais completos e a atenção com o controle de inversão deve ser maior, pois qualquer equívoco pode acarretar em um erro na cadeia de implementações na solução com o deploy. Pois uma aplicação não pode ficar parada enquanto um serviço é atualizado para uma nova versão. Por isso, o monitoramento é essencial, caso aconteça alguma falha no sistema é preciso reconhecer rapidamente a fonte problemática.

Estas soluções são indicadas para alguns casos:

  • Aplicações grandes: que necessitam de uma alta taxa de velocidade de liberação;

  • Aplicações complexas: que precisam ser altamente escaláveis e dimensionáveis;

  • Aplicações com domínios avançados ou muitos subdomínios;

  • Aplicações ou em uma Organização que tenha equipes pequenas de desenvolvimento. 

Ambas as arquiteturas de softwares possuem suas vantagens e desvantagens. Para escolher o modelo que melhor se adequa ao seu negócio, é importante entender suas dinâmicas e necessidades. 

Tags: microsserviços, arquitetura monolítica