Descubra como implementar a eficiente Arquitetura de Microsserviços para maior agilidade e eficácia em seu desenvolvimento de software.
Tempo de Leitura: 6 minutos
Conforme avançamos na evolução da tecnologia da informação, torna-se necessário compartilhar maiores volumes de dados de forma segura e rápida, oferecendo a melhor experiência possível para o usuário final.
Com maiores demandas de softwares e sistemas de informação, nós, desenvolvedores, tivemos que nos adaptar e criar sistemas que se comunicam entre si, para resgatar e compartilhar informações de forma segura e organizada. Por volta de 1990, quando surgiu a arquitetura SOA (Service Oriented Architecture) ficou mais fácil enviar e receber informações de outros sistemas, pois a integração entre estas aplicações ficou mais performática, além de que, era possível reutilizar a estrutura SOA para integrar outros sistemas com diferentes regras de negócio.
Os Microsserviços surgiram no mercado na sequência da arquitetura SOA e apresenta grande semelhança, porém suas diferenças ficam nítidas quando se olha para seu escopo de negócio. Diferentemente da arquitetura SOA, os Microsserviços tem seu escopo limitado a uma única aplicação, independente de todo restante do sistema e com uma única função.
Já a arquitetura SOA tem seu escopo definido para toda organização, podendo, inclusive, utilizar Microsserviços em seu contexto. A imagem abaixo exemplifica a diferença entre estas duas arquiteturas, onde percebemos que os Microsserviços podem estar contidos dentro do contexto da arquitetura SOA:
O que é arquitetura de microsserviços?
De acordo com a AWS, arquitetura de microsserviços ou apenas “Microsserviços” é uma abordagem de arquitetura de desenvolvimento na qual um software é dividido em pequenas partes ou módulos, no qual nos referimos como microsserviços. Cada parte do sistema implementa um único serviço, ou seja, uma única e bem definida função e estas partes se comunicam entre si, sendo independentes umas das outras e tendo sua própria stack de tecnologia (cada microsserviço tem seu próprio banco de dados, se necessário, uma equipe de desenvolvedores específica, seu próprio gerenciamento de dados).
Normalmente, quando falamos sobre Microsserviços, nos atemos apenas à parte estrutural e arquitetônica, porém esta metodologia de desenvolvimento pode ser compreendida através dos seus valores organizacionais e de negócio, como, por exemplo:
- Cada parte do sistema pode receber manutenção e novas implementações de código, de forma separada e independente, sem afetar os demais módulos, o que facilita o dia-a-dia do ciclo de desenvolvimento do software.
- As equipes de desenvolvimento podem utilizar linguagens de programação diferentes para cada serviço, visto que estes são fracamente acoplados.
- É possível aumentar ou diminuir a escala de um componente de forma fácil e independente, sem prejudicar os demais.
Sendo assim, podemos dizer que Microsserviços é uma forma de organizar a estrutura do fluxo de processos de um sistema, visando aplicar Clean Code, DevOps e demais metodologias ágeis para facilitar a manutenção, implementação, melhoria e organização de um software.
Exemplificando: os Microsserviços são como as teclas de um teclado, cada teclinha tem sua própria função, podemos removê-la individualmente para limpar ou trocar por uma nova e, caso ela pare de funcionar, não irá impactar no funcionamento das demais teclas do teclado, já o teclado como um todo é um sistema com um propósito diferente e mais complexo do que cada teclinha. Para ir mais a fundo, podemos imaginar que o circuito elétrico de cada teclinha é como se fosse a equipe e infraestrutura relacionada somente àquela tecla (serviço).
O que é SOA?
Arquitetura Orientada a Serviços (SOA) é uma abordagem de desenvolvimento de software, no qual o principal objetivo é obter uma interface integradora totalmente desacoplada do código, para ser reutilizada em vários projetos, sem a necessidade de realizar uma integração ponta a ponta com cada sistema que se necessita trocar informações.
Essas interfaces integradoras frequentemente utilizam WSDL (Web Service Definition Language) para definir sua função, utilizando XML (Extensible Markup Language) para realizar a comunicação entre as aplicações.
Os serviços disponíveis nessas interfaces são expostos à rede por meio de protocolos padrão como SOAP (Simple Object Access Protocol) ou JSON via requisições HTTP e costumam ter sua função bem definida como, por exemplo: checar um CPF, buscar dados de um CEP, processar uma ordem de serviço e estes sistemas costumam ser desenvolvidos em Java, .Net ou Cobol
Qual a diferença entre Microsserviços e SOA?
Existem muitos debates e críticas que rodeiam o tema “Microsserviços vs SOA”, isso se dá porque estas arquiteturas são muito parecidas de primeira vista, ambas possuem semelhanças técnicas e conceituais, porém a maior diferença se dá no escopo de cada uma, é importante entender essa diferença para captar melhor o objetivo dos Microserviços no mercado atual.
SOA:
Como mencionado anteriormente, é uma aplicação com escopo para a empresa toda, é o sistema todo, uma interface completa e disponibilizada para que sistemas externos possam integrar de forma desacoplada a outros sistemas, define como cada aplicativo irá se comunicar e integrar entre si.
Microsserviços:
Tem seu escopo limitado a um aplicativo, como sendo apenas uma parte, uma função básica e restrita, não define como os aplicativos de um sistema irão conversar entre si.
Benefícios dos Microsserviços
No mercado é muito comum que os líderes de projetos e donos de empresas conheçam mais sobre Microsserviços do que os próprios desenvolvedores, isso se dá, principalmente, porque essa arquitetura é um espelho do objetivo organizacional e administrativo de suas equipes e da estrutura de desenvolvimento da empresa. Nesse contexto, os Microsserviços seriam uma ferramenta para atingir a meta e os objetivos da organização.
Segundo a IBM, em uma pesquisa com mais de 1200 desenvolvedores e executivos de TI, 87% dos usuários de Microsserviços concordaram que a implementação desta arquitetura foi benéfica econômica e logisticamente, abaixo veremos as características mais importantes dos Microsserviços.
Independência:
O principal atributo dos Microsserviços é sua independência do restante do software em que está inserido, promovendo uma grande facilidade de manutenção, evitando burocracias para adicionar, alterar ou remover linhas de código. Isso também permite que tenhamos mais segurança em relação à aplicação inteira, pois se ocorrer uma falha em algum serviço, o restante da aplicação continua funcionando sem nenhuma interferência. Além disso, a independência dos Microsserviços facilita na divisão de equipes, pois podemos designar sua responsabilidade para uma equipe pequena de desenvolvedores, lhes fornecendo total autonomia sobre essa parte da aplicação.
O fato de que cada Microsserviço implementa uma pequena parte do Software faz com que tenhamos maior facilidade em empregar ou mudar um integrante da equipe, visto que seu escopo e suas funcionalidades serão facilmente compreendidos por novas pessoas – imagine trabalhar em um pequeno projeto cuja única função é receber solicitações de busca de CEP e devolver as informações de forma estruturada para o solicitante, fácil né?
Eficiência:
Não existe nada tão bom para realizar cálculos matemáticos básicos do que uma calculadora! Essa é uma premissa básica dos Microsserviços, pois cada serviço é responsável por uma única tarefa bem definida. Juntamente com a independência, o Microsserviço poderá ter seu próprio banco de dados (se necessário), implementar seus métodos em determinada linguagem de programação que se adequa melhor para sua função, ter desenvolvedores designados especialmente para seu escopo.
Cada Microsserviço deve ser desenvolvido para executar uma tarefa única, que faça sentido no contexto em que ele é utilizado, e para isso, pode e deve utilizar as melhores ferramentas; e melhor ainda: com o avanço da tecnologia, poderemos implementar formas diferentes de executar suas funções, utilizando novas abordagens e diferentes metodologias de desenvolvimento, sem interferir no restante do Software, se mantendo sempre atualizado no mercado.
Controle:
Depois que o Microsserviço foi implementado fica muito fácil e simples realizar manutenções e ajustes de escala, ou seja, caso necessite incrementar tabelas em seu banco de dados, refatorar código ou aplicar melhorias, podemos medir com bastante precisão as escalas de cada ajuste, pois temos um pequeno, independente e específico serviço.
Desafios dos Microsserviços
Caso você possua um sistema monolítico já funcionando e queira implementar Microsserviços, recomendamos ir alterando o sistema aos poucos, conforme novas funcionalidades vão sendo criadas, pois quebrar um sistema inteiro em pequenas partes pode ser muito trabalhoso.
Outro detalhe que costuma passar batido na discussão sobre Microsserviços é a dificuldade de realizar testes e capturar todo histórico de possíveis erros de execução através de logs, visto que os serviços podem se comunicar diversas vezes entre si para uma operação.
Exemplo de implementação
Embora o assunto seja extenso, na prática, os Microsserviços podem parecer bem simples, como exemplo, imagine a seguinte situação: você desenvolveu um site com uma lojinha on-line, para venda de camisetas. Este site possui o seguinte fluxo: o cliente acessa o site, escolhe uma camiseta que preferir, seleciona o tamanho e cor, adiciona ao carrinho, preenche informações de CEP, cartão de crédito e por fim finaliza a compra. Neste exemplo já podemos implementar um sistema com mais de um Microsserviço, seriam eles:
1 - Microsserviço que dispõem as camisetas disponíveis na tela
2 - Microsserviço que consulta o estoque
3 - Microsserviço de consulta de CEP
4 - Microsserviço de cobrança/verificação de cartão de crédito
Ter estes pequenos serviços separados pode facilitar o ciclo de desenvolvimento, além de melhorar a experiência do usuário, visto que se alguma parte do site parar de funcionar, o cliente pode continuar utilizando o restante do sistema.
Conclusão
O uso dos Microsserviços faz muito sentido quando se tem um sistema grande, com equipes grandes, onde a manutenção, organização e melhorias vai ficando mais complexo ao longo do tempo, porém não existe bem uma “regra” para se aplicar desde o início de um novo desenvolvimento; por isso, fica livre para a equipe de projetos decidir se fará sentido utilizar esta arquitetura.
Utilizar muitas linguagens de programação e tecnologias diferentes em cada serviço pode trazer uma alta complexidade na manutenção do sistema como um todo, por este motivo, a independência dos Microsserviços pode ser também seu ponto fraco, se não for bem organizado e planejado.
Gostou deste conteúdo?
Então vamos continuar a discussão lá no fórum, basta clicar no botão abaixo e participar!