Cloudflare เปลี่ยนจาก NGINX เป็นพร็อกซี Pingora ของตัวเองที่เขียนด้วย Rust

Cloudflare ได้ประกาศว่ากำลังย้ายเครือข่ายการส่งเนื้อหาไปใช้พร็อกซี Pingora ซึ่งเขียนด้วยภาษา Rust พร็อกซีใหม่ได้แทนที่การกำหนดค่าบนเซิร์ฟเวอร์ NGINX ด้วยสคริปต์ Lua และจัดการคำขอมากกว่าล้านล้านรายการต่อวัน โปรดทราบว่าการเปลี่ยนไปใช้พร็อกซีเฉพาะทำให้ไม่เพียงใช้คุณสมบัติใหม่และเพิ่มความปลอดภัยเนื่องจากการทำงานกับหน่วยความจำอย่างปลอดภัย แต่ยังนำไปสู่การเพิ่มประสิทธิภาพและการประหยัดทรัพยากรอย่างมีนัยสำคัญ - โซลูชันที่ใช้ Pingora ไม่ต้องการการใช้งาน ของ Lua ดังนั้นจึงใช้ CPU ทรัพยากรน้อยลง 70% และหน่วยความจำน้อยลง 67% ในขณะที่จัดการปริมาณข้อมูลเท่าเดิม

เป็นเวลานานแล้วที่ระบบพร็อกซีทราฟฟิกระหว่างผู้ใช้และเซิร์ฟเวอร์ปลายทางที่ใช้สคริปต์ NGINX และ Lua ตอบสนองความต้องการของ Cloudflare แต่เมื่อเครือข่ายขยายใหญ่ขึ้นและความซับซ้อนเพิ่มขึ้น โซลูชันสากลยังไม่เพียงพอ ทั้งในแง่ของประสิทธิภาพ และเนื่องจากข้อจำกัดในการขยายและการดำเนินการตามโอกาสใหม่ๆ สำหรับลูกค้า โดยเฉพาะอย่างยิ่ง มีปัญหาในการเพิ่มฟังก์ชันนอกเหนือจากเกตเวย์ธรรมดาและโหลดบาลานเซอร์ ตัวอย่างเช่น ในกรณีที่เซิร์ฟเวอร์ไม่สามารถประมวลผลคำขอได้ จำเป็นต้องเปลี่ยนเส้นทางคำขอไปยังเซิร์ฟเวอร์อื่น โดยจัดหาส่วนหัว HTTP ชุดอื่นให้เซิร์ฟเวอร์

แทนที่จะใช้สถาปัตยกรรมที่มีการแยกคำขอออกเป็นกระบวนการของผู้ปฏิบัติงาน (ผู้ปฏิบัติงาน) แยกกัน Pingora ใช้โมเดลแบบมัลติเธรด ซึ่งในสถานการณ์การใช้งาน Cloudflare (ปริมาณการใช้งานที่มีความเข้มข้นสูงจากไซต์ต่างๆ ที่มีการเปลี่ยนแปลงทางสถิติขนาดใหญ่) แสดงให้เห็นถึงการกระจายทรัพยากรที่มีประสิทธิภาพมากขึ้นระหว่าง แกนซีพียู โดยเฉพาะอย่างยิ่ง การรวมคำขอที่ไม่สมดุลเข้ากับกระบวนการใน nginx นำไปสู่การโหลดที่ไม่สมดุลบนคอร์ CPU ซึ่งเป็นผลมาจากคำขอที่ใช้ทรัพยากรมากและการบล็อก I / O ทำให้การประมวลผลคำขออื่นช้าลง นอกจากนี้ การรวมพูลการเชื่อมต่อกับกระบวนการตัวจัดการไม่อนุญาตให้ใช้การเชื่อมต่อที่สร้างไว้แล้วซ้ำจากกระบวนการตัวจัดการอื่น ซึ่งลดประสิทธิภาพเมื่อมีกระบวนการตัวจัดการจำนวนมาก

จิงซ์:

Cloudflare เปลี่ยนจาก NGINX เป็นพร็อกซี Pingora ของตัวเองที่เขียนด้วย Rust

พิงโกรา:

Cloudflare เปลี่ยนจาก NGINX เป็นพร็อกซี Pingora ของตัวเองที่เขียนด้วย Rust

การเปิดตัว Pingora ทำให้สามารถลดจำนวนการดำเนินการสร้างการเชื่อมต่อใหม่ได้ถึง 160 เท่า และเพิ่มส่วนแบ่งของคำขอที่ใช้ซ้ำจาก 87.1% เป็น 99.92% นอกเหนือจากการลดการเชื่อมต่อใหม่และการใช้คอร์ CPU อย่างมีประสิทธิภาพมากขึ้นแล้ว ประสิทธิภาพของพร็อกซีใหม่ส่วนใหญ่เกิดจากการกำจัดตัวจัดการ Lua ที่ช้าซึ่งใช้กับ nginx

ภาษา Rust ได้รับเลือกเพื่อให้มีประสิทธิภาพสูงรวมกับความพร้อมใช้งานของเครื่องมือที่ปลอดภัยสำหรับหน่วยความจำ มีการกล่าวถึงว่าแม้วิศวกร Cloudflare จะมีคุณสมบัติสูงและการตรวจสอบโค้ดที่เขียนด้วยภาษา C ก็ไม่สามารถหลีกเลี่ยงข้อผิดพลาดที่นำไปสู่ปัญหาหน่วยความจำได้ (เช่น ช่องโหว่ในตัวแยกวิเคราะห์ HTML) สำหรับโค้ดใหม่ เราได้พูดถึงกรณีการวิเคราะห์ข้อขัดข้องใน Pingora ซึ่งไม่ได้เกิดจากปัญหาในแอปพลิเคชัน แต่เกิดจากข้อผิดพลาดในเคอร์เนล Linux และฮาร์ดแวร์ล้มเหลว

นอกจากนี้ยังสามารถสังเกตได้ว่า Linus Torvalds แสดงความคิดเห็นเกี่ยวกับการรวมการสนับสนุนสำหรับภาษา Rust ในเคอร์เนล Linux ซึ่งถูกเปล่งออกมาในการประชุม Open-Source Summit Europe ที่เกิดขึ้นในปัจจุบัน เคอร์เนล 6.0 ไม่รวมแพตช์สำหรับการพัฒนาไดรเวอร์อุปกรณ์ในภาษา Rust แต่จากข้อมูลของ Linus พวกเขามีแนวโน้มที่จะนำมาใช้ในเคอร์เนล 6.1 เขาจะไม่ดึงการรวมเข้าด้วยกัน เพื่อเป็นแรงจูงใจในการเพิ่มการสนับสนุนสำหรับ Rust นอกเหนือจากผลกระทบในเชิงบวกต่อความปลอดภัยแล้ว Linus ยังเรียกโอกาสที่จะเพิ่มความสนใจในการทำงานกับแกนหลักของผู้เข้าร่วมใหม่ ซึ่งเป็นสิ่งสำคัญในบริบทของผู้จับเวลาที่มีอายุมาก

ที่มา: opennet.ru

เพิ่มความคิดเห็น