Cloudflare เลิกใช้ nginx และสร้าง HTTP Proxy (Pingora) ด้วย Rust มาใช้งาน
(blog.cloudflare.com)nginx มีข้อจำกัด
- ใช้ worker เพียงตัวเดียวต่อหนึ่งคำขอ จึงเกิดความไม่สมดุลในการใช้ CPU core
- เนื่องจากมี connection pool แยกตามแต่ละ worker ทำให้อัตราการนำ TCP และ TLS connection กลับมาใช้ซ้ำไม่ดี -> TTFB สูงขึ้น
- นอกจากนี้ ฟีเจอร์ที่จำเป็นต่อการใช้งาน nginx ก็ต้องพัฒนาขึ้นเอง แต่ nginx ที่ออกแบบด้วย C ไม่ได้เป็น memory-safe ทำให้แม้แต่วิศวกรที่ชำนาญก็ยังพลาดได้
Pingora
- Cloudflare ได้รับคำขอที่ไม่เป็นไปตามมาตรฐาน RFC อยู่มาก แต่ไลบรารีของบุคคลที่สามอย่าง hyper ถูกพัฒนาให้เคร่งครัดตาม RFC จึงต้องใช้แรงเพิ่มหากจะขยายความสามารถ เลยเลือกสร้างขึ้นเอง
- เลือก Rust เพราะสามารถทดแทนสิ่งที่ C ทำได้ด้วยวิธีที่ memory-safe โดยไม่ลดทอนประสิทธิภาพ
- เพื่อให้แชร์ connection pool ได้ง่าย จึงนำระบบ scheduling แบบ work-stealing มาใช้ และทำให้อัตราการใช้ซ้ำเพิ่มขึ้น ปัจจุบันสร้าง connection ต่อวินาทีเหลือเพียง 1/3 เมื่อเทียบกับก่อนหน้า
- ใช้ CPU น้อยลง 70% และใช้หน่วยความจำน้อยลง 67% เมื่อเทียบกับเดิม
- มีแผนจะเปิดโอเพนซอร์สในอนาคต
5 ความคิดเห็น
การใช้ CPU 70% และหน่วยความจำ 67% นี่น่าทึ่งมากจริง ๆ..
ว้าว ผมก็ใช้ nginx ได้ดีมากเหมือนกัน ถ้าอันนี้ออกมาเป็นโอเพนซอร์สเมื่อไร อยากลองใช้ทันทีเลยครับ
ถึงจะเรียน Rust ก็ยังแทบไม่มีที่ให้สมัครงานเลย
Rust นี่ถูกใจเลยครับ
อย่างน้อยในงานเขียนโปรแกรมระบบ Rust ก็กำลังกลายเป็นตัวเลือกที่โดดเด่นขึ้นเรื่อย ๆ เลยนะ..