- Non-Rust sunuculara (JavaScript, Python, Java vb.) kademeli olarak Rust ekleme stratejisini tanıtıyor
- Amaç, CPU darboğazı nedeniyle performans gereksinimlerini karşılayamayan sıcak fonksiyonları belirleyip bunları Rust ile yeniden uygulamak
- Strateji, Tier (Rust benimseme seviyesi) olarak ayrılıyor; Tier 0 Rust kullanılmayan durum, son Tier ise tüm sunucunun Rust ile yeniden yazılması
Strateji
Tier 0: Rust yok
- Node.js sunucusunda QR kodu oluşturma endpoint'i uygulanıyor
- Referans performans: saniyede 1464 istek, ortalama gecikme 68ms, p99 gecikme 96ms, ortalama yanıt boyutu 1506 bayt, bellek 1353MB
Tier 1: Rust CLI aracı
- QR kodu oluşturma fonksiyonu Rust ile yeniden yazılıyor ve bir CLI aracı olarak derleniyor
- Ana sunucu CLI aracını çağırıyor
- Referansa kıyasla performans: saniyedeki istek sayısı 1.76 kat artıyor, ortalama gecikme 0.57 kata düşüyor, ortalama yanıt boyutu 0.52 kata düşüyor, bellek kullanımı 0.92 kata düşüyor
Tier 2: Rust Wasm modülü
- Rust fonksiyonu bir Wasm modülü olarak derleniyor ve ana sunucuda Wasm runtime kullanılarak yüklenip çalıştırılıyor
- Node.js sunucusunda
wasm-bindgen kullanılıyor
- Referansa kıyasla performans: saniyedeki istek sayısı 2.03 kat artıyor, ortalama gecikme 0.50 kata düşüyor
- Wasm binding'lerini elle yazma yöntemi de anlatılıyor (diğer dil kullanıcıları için)
Tier 3: Rust native fonksiyonu
- Fonksiyon Rust ile yazılıyor, native koda derleniyor, ana runtime içinde yüklenip çalıştırılıyor
- Node.js için
napi-rs kullanılıyor
- Referansa kıyasla performans: saniyedeki istek sayısı 3.75 kat artıyor, ortalama gecikme 0.26 kata düşüyor
Tier 4: Rust ile yeniden yazım
- Ana sunucunun tamamı Rust ile yeniden yazılıyor
- Pratikte ise ana sunucunun yalnızca bir kısmını yeniden yazmak daha gerçekçi
- Referansa kıyasla performans: saniyedeki istek sayısı 4.93 kat artıyor, ortalama gecikme 0.21 kata düşüyor, bellek kullanımı 0.01 kata düşüyor (13MB kullanım)
Sonuç
- Tüm stratejiler iyi, ancak en etkili olan Tier 3
- Hazır binding üretici kütüphaneler kullanılabiliyorsa Rust ile native fonksiyon yazmak kolay ve performans üzerinde büyük etkisi var
4 yorum
O........ çeşitli işleri biraz ayak işi gibi yaparken ikisini de az çok kullanır oldum; gerçekten çok faydalı bir bilgiymiş.
Son zamanlarda Rust'a bakıyorum. İlginç bir yazıymış.
Oldukça iyi bir yazı. Rust'ın doğru şekilde kullanıldığı örneklerden biri bu.
Eskiden C/C++ ile çözülen alanlarda Rust'ın gerçekten popüler olduğu anlaşılıyor.