26 pontos por xguru 2024-11-02 | 4 comentários | Compartilhar no WhatsApp
  • Apresenta estratégias para adicionar Rust gradualmente em servidores Non-Rust (JavaScript, Python, Java etc.)
  • O objetivo é identificar funções críticas com gargalo de CPU que não atendem aos requisitos de desempenho e substituí-las por implementações em Rust
  • As estratégias são divididas por Tier (nível de adoção de Rust), em que o Tier 0 não usa Rust e o último Tier reescreve o servidor inteiro em Rust

Estratégia

Tier 0: sem usar Rust

  • Implementação de um endpoint de geração de QR code em um servidor Node.js
  • Desempenho de referência: 1464 requisições por segundo, latência média de 68ms, latência p99 de 96ms, tamanho médio de resposta de 1506 bytes, memória de 1353MB

Tier 1: ferramenta CLI em Rust

  • Reescrita da função de geração de QR code em Rust e compilação como ferramenta CLI
  • O servidor host chama a ferramenta CLI
  • Desempenho em relação à referência: 1,76x mais requisições por segundo, latência média reduzida para 0,57x, tamanho médio de resposta reduzido para 0,52x, memória reduzida para 0,92x

Tier 2: módulo Wasm em Rust

  • Compila a função Rust como módulo Wasm e carrega/executa no servidor host usando um runtime Wasm
  • No servidor Node.js, usa wasm-bindgen
  • Desempenho em relação à referência: 2,03x mais requisições por segundo, latência média reduzida para 0,50x
  • Explica como escrever bindings Wasm manualmente (para usuários de outras linguagens)

Tier 3: função nativa em Rust

  • Escreve a função em Rust, compila para código nativo e carrega/executa no runtime host
  • No Node.js, usa napi-rs
  • Desempenho em relação à referência: 3,75x mais requisições por segundo, latência média reduzida para 0,26x

Tier 4: reescrita em Rust

  • Reescreve todo o servidor host em Rust
  • Na prática, reescrever apenas parte do servidor host é o mais realista
  • Desempenho em relação à referência: 4,93x mais requisições por segundo, latência média reduzida para 0,21x, memória reduzida para 0,01x (uso de 13MB)

Conclusão

  • Todas as estratégias são boas, mas o Tier 3 é o mais eficaz
  • Se for possível usar uma biblioteca pronta para geração de bindings, escrever funções nativas em Rust é fácil e tem grande impacto no desempenho

4 comentários

 
readiz 2024-11-06

Nossa... acabei mexendo um pouco com os dois enquanto fazia várias coisas meio como um faz-tudo, e isso é uma informação muito boa.

 
johnnydev 2024-11-04

Tenho acompanhado Rust recentemente. É um texto interessante.

 
cosine20 2024-11-04

É um texto muito bom. Este é um exemplo de como usar Rust corretamente.

 
regentag 2024-11-02

Parece que o Rust realmente está ganhando popularidade em áreas que antes eram resolvidas com C/C++.