- 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
Oh........ sambil menangani berbagai hal seperti serabutan, saya jadi sedikit memakai keduanya, dan ini benar-benar informasi yang sangat bagus.
Akhir-akhir ini saya sedang melihat-lihat Rust. Ini tulisan yang menarik.
Tulisan yang sangat bagus. Ini contoh yang tepat tentang penggunaan Rust dengan benar.
Sepertinya Rust memang jelas semakin populer di area yang sebelumnya diselesaikan dengan C/C++.