OpenFreeMap แบ่งปันประสบการณ์ที่รับคำขอได้ 100,000 รายการต่อวินาที
(blog.hyperknot.com)- OpenFreeMap จัดการคำขอได้ถึง 100,000 ต่อวินาทีและทราฟฟิกรายวัน 300 ล้านรายการได้สำเร็จ
- ความนิยมที่เกิดขึ้นอย่างกะทันหันของ Wplace.live และคำขอจำนวนมากแบบอัตโนมัติเป็นสาเหตุของการพุ่งสูง
- อัตรา CDN cache 99.4% ของ Cloudflare พร้อมเซิร์ฟเวอร์ที่รองรับโหลดที่เหลืออีก 1,000 rps ได้อย่างราบรื่น
- ทำให้เกิดปัญหาเล็กน้อยเช่น tile หายไปเป็นครั้งคราว ขณะที่ระบบให้บริการได้ตามปกติมากกว่าเดิม
- วางแผนปรับปรุงการจัดการทราฟฟิกอัตโนมัติในอนาคต เช่นการจำกัดแบนด์วิดธ์ตาม Referer
10 เดือนที่ผ่านมาและประสบการณ์รับมือทราฟฟิกขนาดใหญ่ของ OpenFreeMap
OpenFreeMap มีประสบการณ์การให้บริการที่ค่อนข้างเสถียรมาเป็นเวลา 10 เดือน ด้วยความช่วยเหลือด้านแบนด์วิดท์จาก Cloudflare ความเสถียรของเซิร์ฟเวอร์จาก Hetzner บริการ tile บน Btrfs และประสิทธิภาพของ nginx ซึ่งยืนยันความเชื่อถือได้ของระบบได้แล้ว.**
แต่แล้ววันหนึ่งมีรายงานว่ามีบาง tile ที่โหลดไม่ขึ้น ซึ่งปกติแล้วมักเกิดจากบั๊กอัลกอริทึม แต่ในครั้งนี้พบข้อผิดพลาด open() Too many open files ในบันทึกของ nginx
จากเครื่องมือมอนิเตอร์ทราฟฟิกพบว่ามีคำขอเกิดขึ้น 3 พันล้านครั้งใน 24 ชั่วโมง และแม้แต่ไฟล์ tile ขนาดเล็กก็ทำให้เกิดทราฟฟิกถึง 215TB สังเกตได้ว่าช่วงล่าสุด 5 นาทีมีคำขอสูงถึง 30 ล้านครั้ง หรือเทียบได้กับ 100,000 คำขอต่อนาที การรับส่งทราฟฟิกนี้ หากเป็นบริการแผนที่เชิงพาณิชย์คาดว่าค่าใช้จ่ายมากกว่า 6 ล้านดอลลาร์ต่อเดือน
ในแดชบอร์ด Cloudflare, 96% ตอบกลับด้วย 200 OK และมีเพียง 3.6% เท่านั้นที่ผิดปกติ (206 Partial Content). สรุปได้ว่าคำขอส่วนใหญ่ได้รับบริการอย่างปกติ และนอกเหนือจาก tile บางส่วนที่หายไป ระบบโดยรวมก็ทำงานได้ดี
สาเหตุของการพุ่งสูง: Wplace.live
สาเหตุของการพุ่งสูงครั้งนี้คือเว็บไซต์วาดภาพร่วมกันใหม่ที่ชื่อ Wplace.live. หลังเปิดตัวมีผู้ใช้จำนวนมากหลั่งไหลเข้ามา และระบบถูกออกแบบให้ใช้แผนที่บน OpenFreeMap โดยตรง ชุมชนผู้ใช้งานมีการใช้เครื่องมืออัตโนมัติเพื่อละเว้นข้อจำกัด 1 พิกเซล/30 วินาที เช่น Puppeteer/Chromium, การหมุน IP และเทคนิคอื่น ๆ เพื่อสร้างคำขอจำนวนมาก
ผู้ดูแลระบบเน้นย้ำว่าจากประสบการณ์ที่เคยทำงานร่วมกับ Neal.fun มาก่อน การสื่อสารล่วงหน้าเป็นเรื่องสำคัญ ก่อนเกิดพีคทราฟฟิก ครั้งนี้ได้อธิบายว่าการให้บริการถูกกระทบ จึงได้เริ่มใช้กฎของ Cloudflare เพื่อบล็อกครั้งแรก ส่วนอนาคตกำลังสำรวจแนวทางควบคุมทราฟฟิกอัตโนมัติบนฐาน Referer หรือ custom header (รวมถึงการใช้ Cloudflare API)
การสนับสนุนจาก Cloudflare และผลงานของสถาปัตยกรรม OpenFreeMap
Cloudflare อนุมัติการสนับสนุนแบนด์วิดท์ได้อย่างรวดเร็วมาก (อนุมัติภายใน 48 ชั่วโมง รวมวันหยุดสุดสัปดาห์) และยังร่วมคุยกับวิศวกรเรื่องความเหมาะสมด้านสถาปัตยกรรม แสดงให้เห็นถึงความคล่องตัวที่ดีมากแม้จะเป็นองค์กรขนาดใหญ่
ผู้ดำเนินการรู้สึกภูมิใจที่สามารถทำอัตรา CDN cache 99.4% ได้ และเซิร์ฟเวอร์รับโหลด 1,000 rps ได้อย่างดีเยี่ยม ซึ่งเป็นผลลัพธ์ที่ดีมากสำหรับบริการที่มีการอัปเดตข้อมูลรายสัปดาห์
การสื่อสารกับนักพัฒนา Wplace.live และข้อเสนอการแก้ไข
ต่อมาก็สามารถติดต่อกับนักพัฒนา Wplace.live ได้ และเข้าใจได้ว่าการเพิ่มขึ้นอย่างฉับพลันของผู้ใช้ 2 ล้านคนทำให้การเตรียมการไม่พร้อมพอ จึงเสนอให้ใช้การสนับสนุน OpenFreeMap self-hosted instance เพื่อป้องกันการรวมตัวแบบฮอตสปอตของทราฟฟิกและเพิ่มประสิทธิภาพการใช้ทรัพยากรอย่างเหมาะสมได้
นอกจากนี้ จำนวนคำขอ 3 พันล้านครั้งเมื่อเทียบกับผู้ใช้จริง 2 ล้านคน สะท้อนว่าคำขอจำนวนมากนั้นมาจากสคริปต์เป็นหลัก ผู้ใช้ทั่วไปแทบจะทำเพียง 10-20 คำขอเท่านั้น จึงแนะนำให้ปรับนโยบายบริการเพื่อป้องกันคำขออัตโนมัติที่ไม่จำเป็น
แผนปรับปรุงในอนาคตและสิ่งที่ได้เรียนรู้
ผู้ดูแลระบบแจ้งว่าเตรียมปรับปรุงสองประเด็นดังนี้
-
การจำกัดแบนด์วิดท์ตาม Referer
- วางแผนนำระบบจำกัดคำขอต่อ Referer ในช่วง 24 ชั่วโมงลงไปที่ 100-200 ล้านครั้งใน Cloudflare
- ชี้แนะให้แอปเนทีฟใช้ custom header ในการเชื่อมต่อ
-
การจัดการ tile ที่หายไปและปรับปรุงการตั้งค่าเซิร์ฟเวอร์
- วางมาตรการป้องกันการสร้าง tile ว่างที่เกิดจากการตั้งค่าเซิร์ฟเวอร์ที่ไม่ถูกต้อง
OpenFreeMap ใช้การสนับสนุนรายเดือน 500 ดอลลาร์ในการดำเนินการในปัจจุบัน แม้โครงสร้างพื้นฐานจะได้รับการครอบคลุมค่าใช้จ่ายแล้ว แต่การพัฒนาส่วนใหม่ยังคงพึ่งพาเวลาส่วนตัวจำกัด การได้รับการสนับสนุนเพิ่มเติมจะช่วยขยายความเร็วในการพัฒนาและเสริมความเสถียรของระบบได้มากขึ้น
คุณสามารถมีส่วนร่วมสนับสนุนโปรเจกต์ผ่านทาง GitHub Sponsors ได้ที่: https://github.com/sponsors/hyperknot
ยังไม่มีความคิดเห็น