บันทึกประสบการณ์การพัฒนาวิดีโอคอนเฟอเรนซ์แบบ "เรียลไทม์" ของ Tonari

→ ความหน่วงของ Zoom และ WebRTC อยู่ที่ 315-500ms

เพื่อให้ได้ความหน่วงระดับเรียลไทม์ที่ 130ms แทนที่จะไปแตะต้อง WebRTC stack จำนวน 750,000 บรรทัด จึงตัดสินใจออกแบบและสร้างทั้งสแตกขึ้นใหม่ตั้งแต่ต้นให้เหมาะกับฮาร์ดแวร์ที่ต้องการ

→ เลือก Rust เพื่อความปลอดภัย ประสิทธิภาพ และการบำรุงรักษา

Crate ที่ใช้เป็นหลัก

→ สิ่งที่ดีกว่า standard library : crossbeam, parking_lot, bytes, socket2

→ ทำให้ log และ CLI ดูดีขึ้น : fern, structopt

→ ตัวช่วยของ cargo : cargo-release, cargo-udeps, cargo tree, cargo-geiger, cargo-flamegraph

จุดที่ Rust ยาก

  • ใช้เวลาคอมไพล์นาน

  • การครอบคลุมของไลบรารียังไม่มากพอ

  • ต้องการให้เขียนโค้ดอย่างถูกต้องและชัดเจนตั้งแต่แรก

  • ตัวอนุมานชนิดข้อมูลทรงพลังมากจนบางครั้งรู้สึกเหมือนใช้ภาษาที่เป็น dynamic type

  • ภาษายังคงพัฒนาอย่างต่อเนื่อง

ผลลัพธ์ของการเลือก Rust

  • ไม่เคยพบ downtime ที่เกี่ยวกับซอฟต์แวร์

  • ด้วยการใช้ทรัพยากรอย่างมีประสิทธิภาพ จึงเขียนโค้ดที่มีประสิทธิภาพสูงได้ไม่ยาก

  • การใช้ CPU และหน่วยความจำคาดการณ์ได้และสม่ำเสมอทั้งหมด

  • รับประกันความหน่วงและอัตราเฟรมที่คงที่

  • ประสบการณ์ในการดูแลรักษา codebase ก็ดีเยี่ยม

  • สุดท้ายสามารถสร้างผลิตภัณฑ์ที่เชื่อถือได้และดูแลรักษาได้ พร้อมมอบประสิทธิภาพที่รวดเร็วทั้งด้านอัตราเฟรม เวลาแฝง และประสิทธิภาพการใช้ทรัพยากร

→ ถ้าไม่มี Rust ก็คงทำได้ยาก

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น