Microservices é massa né? Depende…

A hype

Muitas das coisas que tem aparecido nas redes sociais em que eu participo, tem alguma coisa a ver com Microservices. Isso talvez se deva em parte pelo tipo de projetos que eu tenho me envolvido nos últimos dois anos, mas com certeza não é o único motivo pra isso.

Para quem conseguiu se manter alheio o“hype”, Microservices é um tipo de arquitetura onde a aplicação é composta por um conjunto de serviços pequenos e autônomos. Dentre os diversos benefícios da adoção desse tipo de arquitetura, talvez um dos mais cobiçados é a modularização que conseguimos quando dividimos uma aplicação em um conjunto de pequenos serviços.

A armadilha

Em um mundo com aplicações cada vez maiores e mais complexas, não é de surpreender que isso atraia a atenção de quem está procurando uma solução para seus problemas de manutenção. A grande questão é que nem todos levam em consideração o “alto custo” de implementação desse tipo de arquitetura.

No artigo Microservice Prerequisites Martin Fowler fala um pouco desse custo do ponto de vista de operações. Nele ele levanta três requisitos básicos para organizações que planejam adotar esse tipo de arquitetura e sugere que talvez exista um modelo de maturidade para organizações que queiram trilhar esse caminho.

Apesar de Microservices ser muitas vezes citado em discussões em oposição ao termo “sistemas monolíticos” ela não é uma solução que visa primariamente lidar com aplicações grandes, mas sim permitir que a composição dos times replique a estrutura organizacional da empresa, fazendo com que a arquitetura tenha um papel muito mais organizacional do que técnico.

Em um outro artigo muito interessante sobre Microservices, Phil Calçado fala um pouco sobre todo o processo que levou a SoundCloud a adotar a arquitetura que eles utilizam hoje em dia. Nele Phil deixa bem claro que os motivos para essa mudança foram muito mais relacionados com a produtividade dos times do que com motivos puramente técnicos.

Microservices are bad?

Isso significa que Microservices não podem ser utilizados para gerenciar o crescimento de nossas aplicações? Não necessariamente. O grande problema é achar que essa é a única solução existente.

Modularização de aplicações não é um nem de longe um problema novo. Todas as principais linguagens utilizadas hoje já possuíam algum tipo de solução para isso muito antes de começamos a discutir o que seriam Microservices. E muitas dessas soluções tem um “custo de implementação” mais baixo do que a alternativa.

Java conta com a ideia de packages, jars e wars já algum tempo, e uma das principais mudanças para a versão 9 da linguagem vai tratar exatamente de adicionar módulos de forma nativa a linguagem. No mundo Ruby nós temos as Gems e os Rails Engines e em Python quem trabalha com o framework Django já está familiarizado com o conceito de Apps há algum tempo. Isso só para citar alguns.

Concluindo…

Opções existem, o grande ponto é tentar entender qual é o problema a ser resolvido e com base no contexto, tentar achar a solução com melhor custo-benefício. Por mais “cool’ que seja, se seu único problema é como gerenciar o tamanho de sua aplicação, talvez Microservices não seja a melhor escolha.