“Microsserviços” é um trending topic. Grandes empresas estão tentando associar suas tecnologias com este conceito. Entretanto, é importante que se destaque que não é necessário usar nenhuma tecnologia em especial para criar microsserviços.

Neste post e nos próximos, vou compartilhar meu entendimento sobre microsserviços, com definições e um bocado de exemplos.

Vamos começar com o básico.

O que são Microsserviços?

Um microsserviço é um serviço pequeno e autônomo com uma, e somente uma, responsabilidade que uma API remota expõe para o resto do sistema. (Sam Newman)

Um microsserviço poderia ser distribuído como um serviço isolado na nuvem, ou ainda em um processo dedicado no sistema operacional. Não precisamos adotar nenhuma tecnologia em especial de hospedagem para trabalhar com microsserviços.

Microsserviços podem ser distribuídos individualmente e de forma rápida. Quando mudamos um microsserviço, devemos poder distribuir apenas ele, sem necessidade de mexer com nenhuma outra parte do sistema. Se você precisa reiniciar/distribuir outros serviços quando distribui um microsserviço, então está fazendo algo errado.

Para ser autônomo verdadeiramente, um microsserviço deve usar seu próprio mecanismo de armazenamento (banco de dados).

Um sistema com microsserviços é um sistema distribuído.

O que é Arquitetura de Microsserviços?

É um estilo de projetar sistemas altamente automatizado, baseado em microsserviços. É uma forma mais leve de SOA onde cada serviço foca em fazer uma coisa somente e fazer bem-feito.

Como cada microsserviço deve ser arquitetado?

Para criar microsserviços, recomendo fortemente a adoção do padrão hexagonal.

Na figura, temos representado dois microsserviços de um sistema de e-commerce: 1) ShoppingCart e 2) ProductCatalog. Cada um possui seu próprio banco de dados.

ShoppingCart usa um adaptador para comunicar com ProductCatalog.

ShoppingCart provê um adaptador HTTP para comunicar com consumidores – de qualquer forma, esta é uma decisão de design. É bastante frequente adotar outras tecnologias, como mensageria por exemplo, para comunicação.

Como um sistema com microsserviços deveria ser arquitetado?

Um sistema feito com microsserviços começa com um API Gateway. Trata-se de um microsserviço (por que não?!) que esconde a complexidade dos demais microsserviços da aplicação consumidora.

Cada microsserviço tem um processo separado e usa seus adaptadores para comunicar com os demais.

Por que adotar microsserviços?

Um sistema feito com microsserviços é robusto por design, sendo mais maleável, escalável e resiliente.

É mais simples praticar continuous delivering com sistemas baseados em microsserviços.

Por que não?

Sistemas baseados em microsserviços são sistemas distribuídos. Eles são mais difíceis de testar (de forma integrada) do que sistemas monolíticos. É justo considerar também que a comunicação através dos limites de um processo são mais lentas do que aquelas dentro do processo.

Microsserviços são desenvolvidos, distribuídos e gerenciados independentemente em produção. Em algum momento, um bocado de ferramentas de monitoramento será necessário.

Próximos passos

Agora que entendemos os conceitos fundamentais de arquiteturas baseadas em microsserviços, estamos prontos para escrever algum código…

Este post tem 3 comentários

  1. Almir Bispo

    Excelente Explicação sobre o termo “MicroService”.Realmente este paradigma facilita muito a manutenção de sistemas.

  2. Felipe

    Excelente post, bem legal a explicação Elemar. Gostaria de tirar uma dúvida, como fica a implementação da comunicação entre os serviços? Você comentou algo relacionado a serviços de mensageria, mas poderia ser feito via chamadas http (rest)? Via rest, seria custoso?

    Seria legal uma segunda parte mostrando alguma implementação de exemplos práticos!
    Obrigado Elemar.
    Abs

  3. Tiago

    Elemar, Ja assisti uma palestra sua sobre microsserviços e vc mencionava a morte da GMUD com essa implementação. Quais os argumentos que podemos usar pra sustentar que GMUD deveria morrer, e senão morrer, qual seria o novo papel desse controle?

Deixe uma resposta