Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

Rinha de Backend 2024 Q1 - Submissão do @Cadu

Foquei em desempenho nesse projeto, com o lema "menos é mais". Isso significa que houveram tradeoffs e alguns corners cortados, buscando boa performance e latência.

Ou seja, nem tudo aqui vai estar tão bonito e arquitetado o quanto poderia ou deveria estar num projeto real.

Diagrama de Componentes

graph TD
  A[(.)] -->|requisições| B[rinha-ingress:9999]
  B -->|requisições| C[rinha-api-1]
  B -->|requisições| D[rinha-api-2]
  C -->|consultas| E[(rinha-db)]
  D -->|consultas| E
Loading

Descrição dos componentes / Stack

  • rinha-ingress
    • nginx
  • rinha-api-{1,2}
    • rust 1.76
    • Api é com o ntex (fork do actix-web pelo próprio autor do actix)
    • Runtime é o tokiozão das massa.
    • Banco de dados:
      • bb8 (pool de conexões)
      • bb8-postgres (adaptador do bb8 pro postgres)
      • tokio_postgres (driver do postgres
    • Extras:
      • chrono pra trampar com datas sem ficar maluco.
      • env_logger pra printar uns treco enquanto tava desenvolvendo.
    • Build multistage copiando o binário para um container scratch
      • literalmente, o container só tem o executável.
  • rinha-db
    • postgres:16
      • fsync ligado, nada de unlogged tables, ...
      • Todas as tabelas tem apenas uma letra no nome, e todos os campos também.
        • Quanto menos bytes no fio, melhor ;-) Vamos aumentar o SNR kkkkk
      • Tweaks de performance para commit assíncrono e emagrecimento do WAL, visto que temos um cenário sem replicações.
  • Algumas considerações:
    • nada de alpine foi usado, de propósito, pois existem algumas considerações de performance importantes com a musl-libc que atrapalhariam o foco aqui, comparado com a glibc.

Repositório

Aleatoriedades

Coisas que me ajudaram pelo caminho.

EOF