Era inevitável… O combate do século aconteceu e você verá com exclusividade (e sem pagar Pay-per-view) aqui, no RustingCrab.
Footprint em software refere-se ao consumo de recursos do sistema, como memória RAM, CPU e espaço em disco, que uma aplicação utiliza durante sua execução. Em ambientes de nuvem, isso é crucial porque os custos são tipicamente baseados no consumo desses recursos. Um menor footprint significa menor uso de memória, processamento e armazenamento, o que se traduz diretamente em menores custos operacionais. Além disso, aplicações com menor footprint tendem a ser mais rápidas, escaláveis e eficientes, permitindo que mais serviços rodem na mesma infraestrutura e respondam melhor sob carga. Isso é especialmente importante em nuvem onde se paga por recurso consumido e a eficiência impacta diretamente no orçamento e performance da solução.
Este teste de performance é um comparativo que usei para convencer um cliente a adotar Rust como parte de sua solução. Na verdade, este é um teste de geração de IDs com Sony Snowflake, implementado em Golang (usando FastHTTP
) e em Rust (usando Axum
e Tokyo
).
Os códigos-fonte estão na pasta servers
.
Usei o K6 para executar os testes e criei scripts em shell
e python
para coletar os resultados e métricas.
Os parâmetros de teste que usei foram:
Só roda em Linux, por enquanto!
1) Instale as dependências Python (aconselho a criar um ambiente virtual com venv
):
pip install -r requirements.txt
2) Instale o k6: https://k6.io/docs/getting-started/installation/
3) Dê permissão para os scripts
chmod +x run_tests.sh
chmod +x monitoring/resource_monitor.sh
./run_tests.sh
python3 analysis/analyze_results.py
Métrica | Rust (axum) | Java (Undertow) |
---|---|---|
Latência média | 0,38 ms | 0,45 ms |
Desvio padrão | 0,21 ms | 0,26 ms |
Máximo observado | 5,34 ms | 3,65 ms |
Total de requisições | 88.121 | 88.051 |
Sucesso | 100% | 100% |
Rust teve menor latência média e maior estabilidade, enquanto Java apresentou picos menores.
Métrica | Rust (axum) | Java (Undertow) |
---|---|---|
CPU média | 3,86% | 3,78% |
CPU máxima | 21,9% | 21,9% |
Virtualmente equivalentes em uso de CPU.
Métrica | Rust (axum) | Java (Undertow) |
---|---|---|
Memória média | 9.966 MB | 10.076 MB |
Variação (σ) | 39 MB | 24 MB |
Rust consome ligeiramente menos memória, enquanto Java apresentou menor variabilidade.
Artefato | Tamanho |
---|---|
Rust (axum) | 877 KB (binário único) |
Java (Undertow) | 3,6 MB (JAR com deps) |
O binário Rust é quase 4x menor e autossuficiente, enquanto o Java depende da JVM.
Resumo:
Este exemplo é muito simples, portanto, a comparação pode conter viés. Eu já rodei comparações com implementações mais complexas e pude notar que a vantagem do Rust aumenta muito. Mas quis manter o mesmo exemplo que usei até agora. Futuramente, montarei um exemplo mais complexo. De qualquer forma, este benchmark é bem mais preciso: https://programming-language-benchmarks.vercel.app/rust-vs-java