Cloudflare รายงานถึงโครงการ Pingora พรอกซี่เซิร์ฟเวอร์ภายในของ Cloudflare เองที่พัฒนาขึ้นเพื่อทดแทน NGINX ที่ทาง Cloudflare พบข้อจำกัดหลายอย่างทำให้ไม่สามารถรีดประสิทธิภาพออกมาได้เต็มที่
ข้อจำกัดสำคัญของ NGINX ที่ Cloudflare พบคือระบบการกระจายโหลดของ NGINX นั้นใช้รูปแบบ worker ที่เป็นโปรเซสในระบบปฎิบัติการ กระจายโหลดระหว่าง worker แต่ละตัวไม่เท่ากัน และไม่สามารถแชร์ connection pool ข้าม worker ได้ ทำให้มี connection ไปยังเซิร์ฟเวอร์ต้นทางมากเกินความจำเป็น รวมถึงการเขียนฟีเจอร์เพิ่มเติมให้กับ NGINX นั้นทำได้ยาก หากไม่เขียนในภาษา C ที่ผิดพลาดได้ง่ายก็ต้องเขียนในภาษา Lua ที่ประสิทธิภาพไม่ดีนักและภาษา Lua ไม่ใช่ static type ทำให้จัดการโค้ดที่ซับซ้อนสูงได้ลำบาก
ทาง Cloudflare เลือกจะพัฒนาพรอกซี่ขึ้นมาใหม่ด้วยภาษา Rust เพราะมีประสิทธิภาพที่ดี และการพัฒนาโครงการเองทำให้ยืดหยุ่นต่อการใช้งานนอกมาตรฐาน เช่น พรอกซี่บางตัวไม่รองรับ HTTP status ที่สูงกว่า 599 แม้ว่าจะมีคนใช้งานนอกมาตรฐานอยู่บ้างก็ตาม
ตอนนี้ Pingora ถูกใช้งานใน request แทบทั้งหมดที่ต้องขอข้อมูลจากต้นทาง (origin server) ระยะเวลาหน่วงก่อนได้รับไบต์แรก (time to first byte - TTFB) ลดลงที่ค่ามัธยฐาน 5ms เพราะสามารถแชร์ connection pool ร่วมกันได้ทั้งเซิร์ฟเวอร์ ทำให้ไม่เสียเวลาเชื่อมต่อใหม่ อัตราการใช้ซีพียูลดลง 70% และใช้หน่วยความจำลดลง 67% เพราะย้ายโค้ดจาก Lua ใน NGINX มาสู่ Rust
ที่มา - Cloudflare
Comments
ที่มา NGINX -> Cloudflare
คนจริง อยากได้ต้องทำเอง อิอิ
..: เรื่อยไป
นี่ ต้องเป็น Cloud flare หรือเปล่าครับ ลิงค์ไปก็เป็น blog ของ cloudflare
ที่สำคัญจะ open source ด้วยนะ, nginx เตรียมปาดเหงื่อ
Web server แต่ละตัวต่างเกิดมาด้วยจุดประสงค์ที่แตกต่างกัน ไม่สามารถใช้ทดแทนกันได้ทั้งหมด ถึง Apache จะกินแรม และ Nginx จะเร็วกว่า 2.5 เท่า แต่ Apache ก็ได้เปรียบในเรื่องความปลอดภัย ฟังก์ชั่น และฟีเจอร์ต่าง ๆ ดังนั้นจะเลือกข้างไปก็เท่านั้น
เลือกข้างไปก็เท่านั้น ทำไมไม่เอาข้อดีทั้ง 2 มารวมกันล่ะ?
ผมว่า ตัวนี้ก็เหมือนกันครับ เกิดขึ้นมาเพราะจุดประสงค์ที่สร้างมันขึ้นมาแตกต่างไป
เกรงว่ามันจะได้ข้อเสียของทั้งคู่มารวมกันแทนครับ
เอาจริง Nginx ไม่ได้ออกแบบมาเพื่อ use case แบบ Cloudflare ด้วย
ถ้าอยากคุม connection เองแบบนี้เขียนเองเหมาะกว่า (แต่ implement HTTP protocol เองมันก็จะเหนื่อยหน่อย)