26 poin oleh xguru 2024-11-02 | 4 komentar | Bagikan ke WhatsApp
  • Memperkenalkan strategi untuk menambahkan Rust secara bertahap ke server non-Rust (JavaScript, Python, Java, dll.)
  • Tujuannya adalah mengidentifikasi hot function yang tidak memenuhi kebutuhan performa karena bottleneck CPU, lalu menggantinya dengan implementasi Rust
  • Strategi dibagi berdasarkan Tier (tingkat adopsi Rust), dengan Tier 0 tanpa Rust dan Tier terakhir menulis ulang seluruh server ke Rust

Strategi

Tier 0: Tanpa Rust

  • Mengimplementasikan endpoint pembuatan kode QR di server Node.js
  • Performa acuan: 1464 request per detik, latensi rata-rata 68ms, latensi p99 96ms, ukuran respons rata-rata 1506 byte, memori 1353MB

Tier 1: Alat CLI Rust

  • Menulis ulang fungsi pembuatan kode QR dalam Rust dan mengompilasinya sebagai alat CLI
  • Server host memanggil alat CLI tersebut
  • Performa dibanding acuan: request per detik naik 1,76x, latensi rata-rata turun menjadi 0,57x, ukuran respons rata-rata turun menjadi 0,52x, memori turun menjadi 0,92x

Tier 2: Modul Rust Wasm

  • Mengompilasi fungsi Rust menjadi modul Wasm, lalu memuat dan menjalankannya di server host menggunakan runtime Wasm
  • Server Node.js menggunakan wasm-bindgen
  • Performa dibanding acuan: request per detik naik 2,03x, latensi rata-rata turun menjadi 0,50x
  • Menjelaskan cara menulis binding Wasm secara manual (untuk pengguna bahasa lain)

Tier 3: Fungsi Native Rust

  • Menulis fungsi dalam Rust, mengompilasinya menjadi kode native, lalu memuat dan menjalankannya di runtime host
  • Node.js menggunakan napi-rs
  • Performa dibanding acuan: request per detik naik 3,75x, latensi rata-rata turun menjadi 0,26x

Tier 4: Tulis Ulang dengan Rust

  • Menulis ulang seluruh server host ke Rust
  • Dalam praktiknya, lebih realistis untuk hanya menulis ulang sebagian server host
  • Performa dibanding acuan: request per detik naik 4,93x, latensi rata-rata turun menjadi 0,21x, memori turun menjadi 0,01x (menggunakan 13MB)

Kesimpulan

  • Semua strategi bagus, tetapi Tier 3 paling efektif
  • Jika bisa menggunakan library generator binding siap pakai, menulis fungsi native dalam Rust menjadi mudah dan memberi dampak besar pada performa

4 komentar

 
readiz 2024-11-06

Oh........ sambil menangani berbagai hal seperti serabutan, saya jadi sedikit memakai keduanya, dan ini benar-benar informasi yang sangat bagus.

 
johnnydev 2024-11-04

Akhir-akhir ini saya sedang melihat-lihat Rust. Ini tulisan yang menarik.

 
cosine20 2024-11-04

Tulisan yang sangat bagus. Ini contoh yang tepat tentang penggunaan Rust dengan benar.

 
regentag 2024-11-02

Sepertinya Rust memang jelas semakin populer di area yang sebelumnya diselesaikan dengan C/C++.