A mídia especializada tem falado muito em micro serviços (ou microservices) nos últimos tempos. Artigos, blog posts, discussões nas mídias sociais e apresentações em conferências têm elevado as expectativas, seguindo o padrão predito pelo modelo da Gartner Hype Cycle.microservices hype_= cycle

O termo micro serviços surgiu em uma conferência de arquitetos de software em maio de 2011 para representar um estilo de arquitetura de sistemas, e não exatamente o tamanho dos serviços que a compõe, como o nome poderia dar a entender.

A proposta da arquitetura de sistemas orientada a micro serviços é desenvolver sistemas que sejam mais flexíveis, escaláveis e com manutenção mais simples do que as arquiteturas de sistemas monolíticas normalmente utilizadas.

A filosofia desta arquitetura é “fazer uma coisa e fazê-la bem”, onde os serviços são focados em realizar uma única função.

Essa não é uma filosofia nova na área de sistemas. McIlroy, Pinsen e Tague, pioneiros do sistema UNIX, já haviam publicado sobre esse conceito em 1978 no clássico artigo “Unix Time-Sharing System: Forward. Revisitar esse conceito e aplicá-lo ao contexto das tecnologias atuais certamente traz muitos benefícios.

Por que os micro serviços são importantes para os negócios?

Naturalmente, o objetivo das empresas é acompanhar a evolução do mercado e evoluir sempre para conseguir cada vez mais excelência, redução de custos e agilidade na criação de novos produtos e serviços que as diferenciem no mercado.

Para tanto, a arquitetura das aplicações também precisa evoluir. E o que é importante nessas aplicações?

  • Devem oferecer aos clientes uma experiência de usuário rica, interativa e dinâmica em diversas plataformas, o que inclui os dispositivos móveis.
  • Devem ser altamente escaláveis, altamente disponíveis e deve ser possível executá-los em ambientes de nuvem.
  • Devem ter atualizações suaves, isto é, e o ideal é que as atualizações não ocasionem paradas ou instabilidades que prejudiquem os usuários.

A arquitetura orientada a micro serviços viabiliza a construção de sistemas que possuem todos esses atributos, diferentemente das aplicações monolíticas. Os micros serviços permitem:

  • Disponibilização de novos processos ou serviços sem impacto nos processos e serviços existentes.
  • Alterações em processos e serviços sem a necessidade de parada de todo o sistema.
  • Otimização da utilização da infraestrutura de nuvem.
  • Redução da complexidade de manutenção.

Dessa maneira, a implementação de novos serviços pelo time de desenvolvimento ao longo do ciclo de vida da aplicação se torna muito mais simples e rápida.

Como funciona a arquitetura monolítica

As principais linguagens de desenvolvimento de aplicações oferecem abstrações para quebrar a complexidade dos sistemas em módulos. Entretanto, são projetadas para a criação de um único executável monolítico, onde toda a modularização utilizada é executada em uma mesma máquina. Os módulos compartilham recursos de processamento, memória, bancos de dados e arquivos.

Uma arquitetura monolítica típica de um sistema complexo pode ser representada pela figura abaixo, onde todas as funções do negócio estão implementadas em um único processo.

micro-servicos-arquitetura-monolitica

Ao longo do tempo o sistema vai crescendo e tornando-se cada vez mais complexo, consumindo cada vez mais recursos. Surgem também alguns desafios substanciais para sua manutenção:

Aumento de complexidade e tamanho ao longo do tempo
O sistema torna-se tão complexo que a manutenção fica cada vez mais cara e lenta, pois os desenvolvedores têm que navegar em uma infinidade de código.

Alta dependência de componentes de código
Muitas funções são interdependentes e entrelaçadas, de forma que a inclusão ou manutenção de componentes do sistema podem causar inconsistências ou comportamentos inesperados.

Escalabilidade do sistema é limitada
Exige que todo o sistema seja replicado mesmo que apenas parte de sua funcionalidade seja necessária na nova instância, ocasionando custos maiores que o esperado.

Falta de flexibilidade
Exige que os desenvolvedores fiquem amarrados à tecnologia originalmente escolhida para o sistema, mesmo que em algumas situações não seja a melhor escolha.

Dificuldade para colocar alterações em produção
Qualquer mudança, por menor que seja, requer a reinicialização do sistema, incorrendo em riscos operacionais e necessitando de acompanhamento da equipe de desenvolvimento, de testes e de manutenção do sistema.

Como funciona a arquitetura de micro serviços

A arquitetura de micro serviços é utilizada para desenvolver uma aplicação como um conjunto de pequenos serviços, cada um funcionando em seu próprio processo. Cada serviço é desenvolvido em torno de um conjunto de regras de negócio específico, e é implementado de forma independente.

Com isso, consegue-se quebrar algumas barreiras existentes no modelo de arquitetura monolítica:

Manutenção e evolução dos serviços mais estáveis
Os desenvolvedores tratarão de códigos que executam uma única função, e cada serviço individual não cresce indefinidamente com o crescimento do sistema.

Serviços com baixo nível de acoplamento e interdependência
Dessa forma, a manutenção em um serviço não interfere diretamente em outras funcionalidades do sistema.

Escalabilidade do sistema
É obtida com o deploy e replicação de micro serviços através da infraestrutura de servidores, máquinas virtuais e containers de forma independente. Isso torna o crescimento e a possibilidade de adaptação do sistema muito mais flexível.

Redução de custos
Como cada aplicação só utiliza os serviços de que necessita, os custos são diretamente associados à funcionalidade e à carga de uso do sistema, não sendo necessário carregar custos associados a funcionalidades não utilizadas.

Flexibilidade de tecnologia
Não é necessário amarrar os desenvolvedores a uma tecnologia específica, pois há baixo acoplamento entre os serviços. Dessa forma, pode ser utilizada a melhor tecnologia para atender a cada caso, além da possibilidade de evoluir o sistema continuamente, diminuindo o risco da obsolescência tecnológica.

Facilidade de colocar alterações em produção
As mudanças no sistema são feitas através das alterações e evoluções feitas nos serviços. Assim, não existe um sistema que precisa ser reinicializado para continuar funcionando. O time de desenvolvimento que precisará acompanhar a mudança será o time responsável pelos serviços que estão sendo alterados.

Fatores relevantes para adotar a arquitetura de micro serviços

Na análise de Martin Fowler, um sistema complexo que utiliza micro serviços tem um custo de manutenção menor do que o de aplicações com arquitetura monolítica, como exemplificado no gráfico a seguir:

micro-servicos-Martin-Fowler

Ganho de produtividade vs. Aumento de complexidade do sistema Martin Fowler – Microservice Premium

Entretanto, uma das barreiras para a adoção de uma arquitetura baseada em micro serviços pode ser o maior custo na entrada, comparado com o custo de um sistema monolítico. Eventualmente existe a necessidade de um esforço extra para a gestão dos micros serviços que deve ser considerado.

Os grandes players no mercado podem ver isso como uma oportunidade de fornecer ferramentas que auxiliem os times na gestão dos micros serviços, de forma a diminuir a barreira de entrada para a adoção dessa arquitetura.

Por exemplo, a Microsoft já atua nesse sentido com o Azure Service Fabric. Esse recurso pretende atuar como middleware para facilitar a criação e gerenciamento de micro serviços em nível corporativo. Uma característica interessante do Service Fabric é que pode funcionar independentemente da plataforma estar ou não na nuvem.

E há riscos em adotar a arquitetura de micro serviços? Tratando-se de sistemas complexos, sempre há riscos para qualquer arquitetura que seja escolhida. Para o caso de micro serviços, é preciso atenção a fatores como:

  • Aumento da complexidade da coordenação.
  • Comunicação entre os micro serviços.
  • Governança.

Portanto, para obter sucesso na adoção da arquitetura, esses fatores devem ser bem planejados, e sua adequada execução deve passar a fazer parte da agenda da área de tecnologia da organização.

Fornecedores de Computação em Nuvem: Amazon na frente, mas Microsoft continua sua jornada para a nuvem

Compartilhe

Compartilhe este post com seus amigos