Rinha App com Quarkus

Essa implementação usa o seguinte stack:

  • Quarkus 3
  • OpenJDK 17
  • PostgreSQL (latest)
  • Nginx (latest)

Como o sistema está ajustado

O foco dessa implementação é o método K.I.S.S.

Por exemplo, não tem cache (e.g., Redis), e o número de conexões com o banco está configurado para 20, por instância de API (40 total). Outro ajuste importante foi o heap da JVM para 80%. Fora isso, o banco (PostgreSQL) e o load balancer (Nginx) tem algums ajustes:

PostgreSQL

  1. max_connections=200

Número máximo de conexões. Com certeza não precisamos mais do que 200. Mais informações.

  1. shared_buffers=256MB

Aumenta o tamanho do buffer em memória para evitar escrita em disco. O padrão é 128MB. Mais informações.

  1. synchronous_commit=off

Executa inserts mais rápido, retornando a conexão imediatamente para o pool. Com este parâmetro, atingimos "consistência eventual" no sistema. Mais informações.

  1. fsync=off

Diminui o número de chamadas para o disco já que não precisamos garantir o estado do banco em caso de crash. Mais informações.

  1. full_page_writes=off

Desabilita escritas do estado do banco após completar diversas atividades do banco. Por ser um benchmark, também não precisamos disso. Mais informações.

Nginx

  1. least_conn

Este modo de load balancer é similar ao round-robin, mas manda o requeste para a instância com menos conexões ativas. Mais informações.

Como rodar?

Use Docker Compose de acordo com o seu sistema operacional.

Para hardware x64, basta executar o comando abaixo:

docker compose up

Se for um hardware Apple M1 ou Linux Arm, execute o comando abaixo:

docker compose -f docker-compose-arm.yml up

Rodar com imagem local

Utilize os arquivos docker-compose-local.yml (x64) ou docker-compose-local-arm.yml (M1/Arm):

x64:

docker compose -f docker-compose-local.yml up

M1/Arm:

docker compose -f docker-compose-local-arm.yml up

Testar aplicação para debug

Inicie o banco de dados:

x64:

docker compose up -d db-postgresql

M1/Arm

docker compose -f docker-compose-arm.yml -d db-postgresql

Inicie a aplicação Quarkus:

./mvnw quarkus:dev

Accesse por http://localhost:8080/contagem-pessoas.

Código fonte

O código está no GitHub, no repositório brunoborges/rinha-app.

Resultados

Até o momento, o melhor resultado foi no meu MacBook M1:

image

Outros resultados executados via GitHub Actions:

Autor

Bruno Borges (@brunoborges).

Qualquer dúvida, pergunta no Twitter.

Licença

MIT