Microsserviços? Esqueças as API's

Pois é, você não leu errado. Esqueça as API's. Mas, respire! Vou explicar melhor...

Frequentemente vejo empresas entrando na modinha de criar microsserviços para tudo, mesmo quando o negócio não precisa, apenas para satisfazer o ego dos developers ou parecer uma empresa descolada e ficar nos trendings. Como já disse em outro artigo por aqui, você precisa mesmo? Realmente não precisa, quase nunca.

Common microservice comunication architecture, aka Oldfashion

No entanto, partindo do pressuposto de que realmente você tenha essa necessidade, sou capaz de apostar que a comunicação definida entre todos os microsserviços, é através das API's, certo? Pois é, você está fazendo isso errado! Quase sempre.

Microservice is not an API!

Erroneamente vejo pessoas associando um microsserviço à uma API, definindo os contextos da aplicação em funcionalidades comuns à uma API. E isso está errado! Absolutamente. Um MS é muito mais do que uma API e não é obrigatóriamente uma API! Ele pode ser simplesmente um executável plugado a um canal de comunicação TCP que processa algo e emite uma resposta, sem nenhum tipo de comunicação HTTP, sem nenhum tipo de conectividade com banco de dados ou algo do gênero. E sim, pode ser.

How HTTP works

Entender o funcionamento do protocolo HTTP é fundamental para compreender como abordarei essa questão nos próximos parágrafos. Para isso, se você ainda não sabe, recomendo a leitura desse artigo. Observe que é não é uma tarefa simplória realizar a comunicação REST, que é pesada, onerosa e pasmem - uma das menos performáticas. Dito isso, se você está adotando a estratégia de microsserviços, provavelmente está buscando performance, né? Então pare de usar API's para comunicar-se entre seus microsserviços.

Desmistificando o padrão RESTful

Bem, eu poderia escrever aqui minha própria opinião sobre o assunto, mas certamente não conseguiria superar a precisão do Elemar neste artigo aqui. https://www.eximiaco.tech/pt/2019/09/13/origem-e-significado-de-rest-e-restful/

É fato que o REST pode trafegar praticamente qualquer coisa no payload, mas noto que majoritariamente as empresas adotaram o JSON como padrão de dados. Considerando que a comunicação entre processos/máquinas não precisa ser verbosa, o JSON definitivamente não é a melhor opção para trabalhos de alta performance.

Forget JSON, adopt gRPC

O JSON é bonitinho, mas ordinário. Em muitos casos na comunicação entre microservices, não precisamos da verbosidade do JSON, precisamos de performance. E nesse caso, há protocolos que desempenham essa função com melhores resultados, dentre eles o gRPC.

Um framework de comunicação distribuída, open-source, que pode ser executado em praticamente todos ambientes. Diferentemente do REST (baseado em HTTP/1), que é um request-response, o gRPC (baseado em HTTP/2) permite ainda streamming de dados de maneira bi-direcional, habilitando assim os microsserviços a "se falarem em realtime", de fato.

No alt text provided for this image

É óbvio que não é uma regra, tão pouco uma recomendação irrestrita de "substitua o JSON ou REST por gRPC", mas é um alerta de que na maioria das vezes o REST não é a melhor escolha.

Para fechar...

Além da já citada falta de necessidade para arquiteturar projetos de microservices, vejo empresas fazendo isso de maneira equivocada, com padrões e modelos mentais da época dos (quase) finados ESB. Arquiteturas que visem centralizar as requisições em um ponto central, ou em um orquestrador centralizado, vão de encontro aos propósitos de haver uma arquitetura distribuída, onde serviços se comunicam com serviços, o mais livremente possível.

Quando projetos envolvendo microsserviços são arquitetados, quase sempre são pensados como se API fossem, se comunicando (quase) sempre via RESTful, esquecendo de considerar protocolos de comunicação mais performáticos.

Para comunicação entre serviços/microsserviços, dê preferencia a um protocolo de mais baixo nível, menos verboso e que te trará mais performance e menor consumo de processamento, como o gRPC. Já para comunicar-se externamente (com o consumer), o melhor caminho ainda é o HTTPs.


p.s.: API é uma das maneiras de se expor métodos/funções de um ou mais microsserviços, e não é necessáriamente a forma como os microsserviços devem se comunicar internamente.

Mas deixe seus comentários aí. Como suas aplicações estão arquitetadas hoje?

abraço,

Lucas Massena

Matheus Costa Poterucha

Data Engineer - Tech lead | Data Mesh | PySpark | AWS | Flutter

5 a
Enrique Sanchez Hilara

Responsable CTO (Chief Technology Officer) Banco de Crédito BCP

5 a

De mais uma reflexao extraordinaria "Microservice is not an API!"

Guilherme Muniz

Diretor de TI | CIO | Tecnologia da Informação | Inovação | Gestão de Projetos | Gestão Estratégica e Operacional

5 a
Felipe Girotti

Software Architect | Principal Engineer | Co-Founder @Live4.tv

5 a

A galera vai muito no hype, a primeira lei sobre sistemas diatribuidos é não distribua a não ser que tenha uma boa razão, tendo isto em mente tende ser async sempre que possível, Microservicos tendem a ser independente, ou seja vai ter overlap de dados entre um e outro e é absolutamente normal. Lembrando que o ruim do grpc é que ainda não tem uma boa solução para request feito direto pelo browser, vc tem que ter um proxy para receber o request e transformar de fato em "binário" para o backend, já com apache thrift é possível. Bom artigo para abrir a cabeça do pessoal.

Agni G B Campos

Digital Transformation, Software Development & Cloud

5 a

@Lucas Massena ☁  Qual a recomendação para os frameworks de BlockChain ? Depende da Categoria ? Voce acha que os DLTs irão dominar o mercado até 2021 ? 

Entre para ver ou adicionar um comentário

Outros artigos de Lucas Massena

  • Event storming as a Digital Transformation enabler

    Event storming as a Digital Transformation enabler

    In the age of digital transformation, businesses need to find new ways to innovate and stay competitive. Event storming…

  • The end of the Middle Ages

    The end of the Middle Ages

    Can you imagine the Middle Ages are ending right now? Yes, we are exactly in the transition. Til now every teacher…

    2 comentários
  • Github is wrong and maybe it's your fault

    Github is wrong and maybe it's your fault

    Yes, you read correct. It could be your fault.

    4 comentários
  • Microservices e LGPD, tá preparado?

    Microservices e LGPD, tá preparado?

    Um dos trending topics do momento, é a Lei Geral Proteção de Dados, a tal LGPD. Você já sabe o quanto vai precisar…

    1 comentário
  • Habemus microservice

    Habemus microservice

    Avisem aos clientes que nós temos microservices! Parece até piada, não é mesmo? Mas é exatamente assim que vejo muitas…

    2 comentários
  • Microsserviços, você precisa mesmo?

    Microsserviços, você precisa mesmo?

    Microsserviço é um dos temas mais polêmicos e que mais tenho falado recentemente, que sempre gera muitas e muitas…

    45 comentários
  • Cache pode não ser a solução do seu SQL

    Cache pode não ser a solução do seu SQL

    Há muitos anos, venho trabalhando como consultor de aplicações web de alto desempenho e constantemente me deparo com…

  • {A} 1st - API First Strategy

    {A} 1st - API First Strategy

    Ao longo da última década, surgiram uma infinidades de paradigmas sobre desenvolvimento de software. Um deles é {A}1st…

  • Microservices - A escalabilidade natural para o enterprise

    Microservices - A escalabilidade natural para o enterprise

    O conceito de microserviços existe há pouco tempo, é verdade. Mas foi só quando o Netflix anunciou a migração para esse…

Outras pessoas também visualizaram

Conferir tópicos