26 คะแนน โดย xguru 2024-11-02 | 4 ความคิดเห็น | แชร์ทาง WhatsApp
  • แนะนำกลยุทธ์การค่อย ๆ เพิ่ม Rust เข้าไปในเซิร์ฟเวอร์ที่ไม่ใช่ Rust (เช่น JavaScript, Python, Java)
  • เป้าหมายคือระบุ hot function ที่ไม่สามารถตอบโจทย์ด้านประสิทธิภาพได้เพราะคอขวดที่ CPU แล้วแทนที่ด้วยการเขียนใหม่ด้วย Rust
  • กลยุทธ์ถูกแบ่งตาม Tier (ระดับการนำ Rust มาใช้) โดย Tier 0 คือไม่ใช้ Rust และ Tier สุดท้ายคือเขียนเซิร์ฟเวอร์ทั้งหมดใหม่ด้วย Rust

กลยุทธ์

Tier 0: ไม่ใช้ Rust

  • ติดตั้ง endpoint สำหรับสร้าง QR code บนเซิร์ฟเวอร์ Node.js
  • ประสิทธิภาพฐาน: 1464 requests ต่อวินาที, latency เฉลี่ย 68ms, latency p99 96ms, ขนาด response เฉลี่ย 1506 ไบต์, หน่วยความจำ 1353MB

Tier 1: เครื่องมือ Rust CLI

  • เขียนฟังก์ชันสร้าง QR code ใหม่ด้วย Rust และคอมไพล์เป็นเครื่องมือ CLI
  • ให้โฮสต์เซิร์ฟเวอร์เรียกใช้เครื่องมือ CLI
  • ประสิทธิภาพเทียบกับค่าฐาน: requests ต่อวินาทีเพิ่มขึ้น 1.76 เท่า, latency เฉลี่ยลดลงเหลือ 0.57 เท่า, ขนาด response เฉลี่ยลดลงเหลือ 0.52 เท่า, หน่วยความจำลดลงเหลือ 0.92 เท่า

Tier 2: โมดูล Rust Wasm

  • คอมไพล์ฟังก์ชัน Rust เป็นโมดูล Wasm แล้วให้โฮสต์เซิร์ฟเวอร์โหลดและรันผ่าน Wasm runtime
  • บนเซิร์ฟเวอร์ Node.js ใช้ wasm-bindgen
  • ประสิทธิภาพเทียบกับค่าฐาน: requests ต่อวินาทีเพิ่มขึ้น 2.03 เท่า, latency เฉลี่ยลดลงเหลือ 0.50 เท่า
  • อธิบายวิธีเขียน Wasm binding ด้วยตนเอง (สำหรับผู้ใช้ภาษาอื่น)

Tier 3: ฟังก์ชันเนทีฟ Rust

  • เขียนฟังก์ชันด้วย Rust, คอมไพล์เป็น native code แล้วโหลดและรันจากโฮสต์ runtime
  • บน Node.js ใช้ napi-rs
  • ประสิทธิภาพเทียบกับค่าฐาน: requests ต่อวินาทีเพิ่มขึ้น 3.75 เท่า, latency เฉลี่ยลดลงเหลือ 0.26 เท่า

Tier 4: เขียนใหม่ด้วย Rust

  • เขียนโฮสต์เซิร์ฟเวอร์ทั้งหมดใหม่ด้วย Rust
  • แต่ในความเป็นจริง การเขียนใหม่เพียงบางส่วนของโฮสต์เซิร์ฟเวอร์มีความเป็นไปได้มากกว่า
  • ประสิทธิภาพเทียบกับค่าฐาน: requests ต่อวินาทีเพิ่มขึ้น 4.93 เท่า, latency เฉลี่ยลดลงเหลือ 0.21 เท่า, หน่วยความจำลดลงเหลือ 0.01 เท่า (ใช้ 13MB)

บทสรุป

  • ทุกกลยุทธ์ล้วนดี แต่ Tier 3 ให้ผลดีที่สุด
  • หากใช้ไลบรารีตัวสร้าง binding สำเร็จรูปได้ การเขียนฟังก์ชันเนทีฟด้วย Rust จะทำได้ง่ายและส่งผลต่อประสิทธิภาพอย่างมาก

4 ความคิดเห็น

 
readiz 2024-11-06

โอ้โห........ ผมทำงานจิปาถะหลายอย่างอยู่พักหนึ่งจนได้ลองใช้ทั้งสองอย่างทีละนิด นี่เป็นข้อมูลที่ดีมากเลยครับ

 
johnnydev 2024-11-04

ช่วงนี้กำลังดู Rust อยู่ เป็นบทความที่น่าสนใจดีครับ

 
cosine20 2024-11-04

เป็นบทความที่ดีมาก นี่คือตัวอย่างของการใช้ Rust ได้อย่างถูกต้องจริงๆ

 
regentag 2024-11-02

ดูเหมือนว่า Rust จะได้รับความนิยมอย่างชัดเจนในด้านที่ก่อนหน้านี้เคยแก้ปัญหาด้วย C/C++.