DEV Community

Cover image for Estudo sobre HTTP2 e protocolos binários - parte 1
marcelmfa
marcelmfa

Posted on • Edited on

3 2 1 1 1

Estudo sobre HTTP2 e protocolos binários - parte 1

Este post faz parte da seguinte série sobre estudo de HTTP2 e protocolos binários:

Estava iniciando junto a colegas do trabalho um estudo sobre o uso de protocolos binários como gRPC e MessagePack a fim de experimentar e avaliar os mesmos em termos de uso e performance, porém algo antes nos incomodou, que é sobre o uso do HTTP2, que tais protocolos fazem uso.

E a pergunta que surgiu foi:

E se antes de experimentarmos esses protocolos, a gente avaliasse o uso de HTTP2 e comparar com o HTTP1.1?

A gente pensando

Eu cheguei a ler artigos como este, que é bem completo, mas acho que ele trata mais do ponto de vista dos browsers, ou seja, quando alguém acessa um site e como ele se comporta para "baixar" (realizar o download) de todos aqueles recursos.

O ponto de vista que eu tava imaginando seria serviço a serviço, algo interno da infraestutura dos produtos, ou seja, seria um consumo lateral de serviços. Dado que era um cenário diferente do artigo supracitado, veio a idéia de criar o meu próprio benchmark.

Beleza então, já tava decidido sobre o "benchmark", agora o lance é planejar como vai ser esse trabalho. Vou precisar de:

  • uma aplicação obviamente que vai ter que se comunicar via HTTP1.1 e HTTP2 com o mínimo de alterações e idealmente nenhuma;
  • um client para realizar esse benchmark e que obviamente possua suporte a HTTP1.1 e HTTP2;
  • algo pra monitoramento, que receba as métricas e que eu possa visualizar as mesmas.

Como a linguagem que mais domino é Java e sou um fã / enorme entusiasta do Spring, já ficou fechada essa parte. A aplicação é uma API REST com um recurso GET que retorna uma lista de dados em JSON. Utilizamos o Java Faker para gerar os dados em runtime, incluí-los numa lista de um POJO e retornar ao solicitante. Pensamos nesta forma para não um retorno de algo estático e ter um mínimo processamento.

Quanto ao client, comecei a pesquisa no amigo de todo dia, Google, e me deparei com essa "pequena" lista de ferramentas. Testei umas 3 delas e por último cheguei no k6 que pra minha surpresa é do Grafana Labs.

Quanto ao monitoramento, onde trabalho estamos investindo e usando Prometheus e Grafana, então veio tudo a calhar com a escolha do k6, que já tem toda uma documentação pronta e com exemplos para esta integração.

Ficou fechado o esquema que seria da forma abaixo.

Arquitetura do benchmark

Podemos ver acima que tem um cara novo e que não citado anteriormente, que é o Influx. Este camarada apareceu aí porque olhando site do Grafana, lá tem vários dashboards prontos e tinha um do k6, porém usava o Influx como base de métricas, então incluí o mesmo para facilitar o trabalho.

Por fim, como vai ser realizado um trabalho de monitoramento e como o foco deste trabalho seria em cima de máquinas virtuais, então pensamos em estabelecer uma cota de recurso e daí veio a idéia de 2 profiles:

  1. 2cpu, 2Gb RAM
  2. 4cpu, 4Gb RAM

O Java 11 possui tais argumentos de VM para poder incluir estas cotas.

Bem, este foi apenas o primeiro post tanto deste estudo como meu próprio.

Abaixo uma imagem ilustrativa de como pode ser o próximo post.

Cenas dos próximos capítulos

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay