Microsserviços
8
min de leitura
3 de janeiro de 2018

Usando a arquitetura Microsserviços como estratégia de habilitação de API

Rafael Rocha
Head of Solutions and Presales
Tecnólogo formado em Tecnologia da Informação pela UNESP e pós-graduado em MBA em Gestão Empresarial pela UNIMEP.
Mais sobre o autor

Contexto

Atualmente, a arquitetura da Microservices tornou-se um hype dentro do segmento de desenvolvimento software . Este modelo de arquitetura é uma abordagem que determina a implantação de aplicações em uma gama de serviços. A equipe de desenvolvimento pode adotar as tecnologias mais apropriadas para resolver problemas específicos. A arquitetura da Microservices também aumenta a escalabilidade ao permitir o uso de abordagens como auto-escala e micro-container.APIs e Microsserviços estão intimamente relacionados, uma vez que o padrão é usar uma interface API totalmente direcionada ao RESTful. No entanto, ainda estamos enfrentando alguns problemas quando precisamos nos integrar com sistemas legados para terceirizar funcionalidades como serviços, já que a maioria dos sistemas não possui protocolos como WebServices ou interfaces RESTful; portanto, vamos explorar esse tópico.

O problema e a abordagem Microsserviços

A maioria das empresas deseja expor os APIs internamente (dentro da corporação) e/ou externamente (a parceiros ou clientes), entretanto, seus sistemas ou aplicações não foram projetados para esse fim. A maioria das aplicações é baseada na seguinte arquitetura:

  • Aplicações web monolíticas usando um banco de dados único. Por exemplo: Java (JSF) com banco de dados Oracle.
  • Produto ou plataforma, como o SAP ERP.
  • Aplicações de alto nível escritas em Cobol
  • Aplicações cliente-servidor implementadas em VB6 e SQL Server.

Quando nos deparamos com esse tipo de cenário, a solução comum é construir um adaptador para expor um protocolo padrão. Esse componente deve ser parecido com o diagrama apresentado abaixo:

O adaptador é o principal componente da solução, uma vez que permitirá a terceirização do serviço. Para promover essa padronização, algumas normas devem ser utilizadas:

  • Compatibilidade total com o padrão RESTful
  • Organização por domínios de negócios
  • Ser facilmente escalável
  • Embalagens leves com uma rápida inicialização.

Para ter uma aplicação com um modelo de integração simples e escalável é necessário ter um estilo de arquitetura que atenda a todos esses requisitos e o estilo de arquitetura que mais se assemelha a essas características é o Microservices. Lembre-se que esta recomendação se aplica quando seu backend não é exposto com o protocolo HTTP, pois a maioria das soluções API Gateways conseguirá facilmente rotear e transformar mensagens para comunicação backend:

  • Orquestração: em alguns casos, deve-se rotear e/ou executar outros serviços, dependendo de alguma condição específica.
  • Composição: às vezes, é necessário executar mais de um serviço para compor e devolver uma resposta.
  • Transformação de mensagens complexas: quando é necessário utilizar algoritmos mais complexos a fim de devolver uma mensagem ao consumidor do serviço.

Finalmente, observe que Microsserviços precisa ser organizado dentro dos domínios de sua empresa. Desta forma, podemos ver que este estilo de arquitetura é uma oportunidade para quebrar o monolítico de seu negócio e fornecer uma arquitetura melhor, como o design apresentado abaixo:

Arquitetura Microserviços

Este é um artigo muito interessante da Microservices.

Microsserviços Estratégia de implementação

Depois de decidir que a implementação do adaptador será baseada em uma arquitetura Microservices, algumas características são necessárias:

  • Embalagens leves e baixo consumo de memória
  • A inicialização do aplicativo deve ser rápida para criar rapidamente novas instâncias de containers ou servidores.
  • Desenvolvimento rápido e simples com base na especificação Swagger
  • Características de segurança como OAuth2

Algumas das estruturas que sugerimos incluem:Java:

  • Bota de mola
  • Estrutura da faísca
  • Estrutura de jogo
  • Dropwizard
  • Apache Camel

JavaScript:

  • js

Outra característica crucial ao implementar APIs utilizando Microservices é a capacidade de integração com sistemas legados. Este tipo de característica requer uma estrutura específica que implemente os padrões de integração comercial (padrões EAI); a recomendação neste caso é usar a estrutura Java Apache Camel.

Microsserviços Estratégia de implementação

Após implementar o pacote Microservices e certificar-se de que ele esteja pronto, deve-se implementá-lo para que esteja disponível para uso. A estratégia mais recomendada é usar os serviços PaaS (Plataforma como um serviço) para implementar os pacotes Microservices. Isto porque este tipo de serviço oferece algumas características muito interessantes, como por exemplo:

  • Uso de recipientes
  • Orquestração de recipientes
  • Armazenamento (sistema de arquivo e banco de dados)
  • Monitoramento em tempo real
  • Registro e rastreamento

Duas outras características importantes são:

  • Ser capaz de subir para apoiar o transporte
  • Oferecendo APIs para automatizar o processo de implementação

As principais ofertas PaaS no mercado para uma estratégia de implementação devem ser avaliadas, inclusive:

  1. Fundição da Nuvem Pivotal
  2. Chapéu vermelho OpenShift
  3. SalesForce Heroku

Outras opções que podem ser consideradas são Amazon Elastic Beanstalk e Google App Engine. Ambos são muito interessantes, pois têm uma integração nativa com serviços de Cloud e Infra-estrutura e também oferecem serviços de infra-estrutura como serviço (IaaS). Entretanto, em nossa opinião, a melhor alternativa para a implementação do Microsserviços é aquela resultante de uma integração completa com uma plataforma de gerenciamento de APIs e, neste caso, o Sensedia API Suite oferece um recurso chamado BaaS (Backend as a Service) que utiliza os mesmos recursos de serviço PaaS e realiza esta integração. Este recurso permite que você realize a implementação e execute seu Microsserviços, expondo diretamente as APIs de seus sistemas legados. As tecnologias suportadas pelo BaaS são:

  • Java
  • js
  • Apache Camel

É importante lembrar que se você puder usar esta plataforma para executar seu Microsserviços que não são apenas aqueles que permitem a integração com legados, ela poderia ser sua plataforma oficial de execução de microserviços.

Microsserviços e API Management Plataformas

Depois que os Microservices estiverem funcionando corretamente, as APIs que expõem os Microservices devem ser bem gerenciadas e algumas das características essenciais para isso, que a maioria das plataformas deste tipo oferecem:

  • Segurança e Resiliência: necessário para proteger seu backend de pessoas ou aplicações não habilitadas para consumir essas APIs. Quando um API é aberto para parceiros, seus Microservices devem ser protegidos contra picos de transporte, para que não estejam fora de serviço e, portanto, é necessário ter controle do limite de tráfego (Rate Limit e Spike Arrest) e do limite de tamanho do corpo da mensagem (Payload Size).
  • Controle de Acesso: Os consumidores API devem estar sob seu controle e, portanto, deve-se usar padrões de mercado como OAuth 2.0 ou JSON Web Tokens.
  • Monitoramento e Rastreamento: deve-se conseguir monitorar todos os tipos de solicitações feitas em sua plataforma; além disso, deve-se ter um poderoso mecanismo de registro para encontrar os erros que ocorrem em sua API.

Todas as capacidades acima são comuns em um API Gateway mas algumas outras características cruciais para a gestão completa de suas APIs são:

  • Caching: deve ser capaz de evitar solicitações desnecessárias no próprio API, oferecendo uma latência muito melhor para suas solicitações, economizando até mesmo o custo da infra-estrutura de backend.
  • Analytics: o uso do API monitorado em tempo real é muito importante, tanto para monitorar o consumo quanto para oferecer insights sobre como vender, rentabilizar e usar o API da melhor maneira.

Como mencionado acima, algumas plataformas API Management oferecem total integração com a plataforma de execução Microsserviços . Este tipo de funcionalidade oferece uma gestão total de todas as partes da solução, não exigindo uma infra-estrutura separada. Dessa forma, sua arquitetura será como mostrado na figura abaixo:

Arquitetura Microserviços e APIs

Conclusão

O uso da arquitetura Microservices permite o desenvolvimento de interfaces RESTful que exporão seu legado que nativamente não tem uma interface HTTP, mas o primeiro desafio é escolher as ferramentas corretas para essa implementação. Há muitas estruturas e linguagens que podem ajudar na implementação de Microsserviços. A decisão depende muito do cenário que está sendo enfrentado, mas alguns dos mais utilizados são mencionados neste artigo.Depois de escolher seu kit de desenvolvimento, a próxima decisão que deve ser tomada é a de determinar a plataforma de implementação e execução. Mais uma vez, a decisão depende muito do cenário que você está enfrentando, mas, neste caso, o objetivo principal é a exposição de APIs RESTful atendendo consistentemente aos requisitos funcionais e não funcionais.Sensedia API Suite é uma ferramenta API management que consegue oferecer a funcionalidade de Backend as Services (BaaS), que pode substituir as responsabilidades de um PaaS na implementação e execução de Microservices. Além disso, a ferramenta oferece todas as características chave para o gerenciamento ideal de uma API, tais como API Gateway com Caching e Analytics. Em resumo, a recomendação é utilizar uma ou mais plataformas integradas que permitam o gerenciamento total de seus Microservices e das APIs que serão expostas.

Referências

[1] Microservices - http://www.martinfowler.com/articles/Microsserviços.html
[2] Apache Camel - http://camel.apache.org/
[3] PaaS Comparator - https://paasfinder.org/compare
[4] Twelve Factor App - https://12factor.net/
[5] Sensedia API Management Platform- http://sensedia.com/api-management-platform/
[6] API Gateway Padrão - https://www.nginx.com/blog/building-Microsserviços-using-an-api-gateway/

Obrigado pela leitura!