𝗕𝘂𝗶𝗹𝗱𝗶𝗻𝗴 𝗮 𝗠𝘂𝗹𝘁𝗶-𝗥𝗲𝗴𝗶𝗼𝗻 𝗛𝗲𝗮𝗹𝘁𝗵-𝗖𝗵𝗲𝗰𝗸 𝗔𝗴𝗴𝗿𝗲𝗴𝗮𝘁𝗼𝗿

ผู้ใช้งานในเซาเปาโล (São Paulo) เข้าถึง edge node ที่ใช้งานไม่ได้ แต่พวกเขาไม่ได้แจ้งรายงานบั๊ก เพียงแค่ปิดแท็บแล้วไปดูอย่างอื่นแทน

ระบบตรวจสอบ uptime ปกติจะตรวจไม่พบเรื่องนี้ เพราะตัวตรวจสอบส่วนใหญ่มักจะส่งสัญญาณจากจุดเดียว ซึ่งจากจุดนั้น ทุกอย่างดูเหมือนจะทำงานปกติ (green)

หน้า status page ของเราเคยแสดงสถานะ uptime 100% ในขณะที่ผู้ใช้งานจริงกลับเจอ timeout การตรวจสอบสถานะ (health check) จากจุดเดียวทั่วโลกกำลังหลอกเราอยู่

และนี่คือวิธีที่เราสร้างระบบที่บอกความจริง

ปัญหา: อคติจากการสุ่มตัวอย่าง (Sampling Bias) หากตัวตรวจสอบของคุณอยู่ในศูนย์ข้อมูล (data center) เพียงแห่งเดียว คุณจะเห็นความจริงเพียงด้านเดียว คุณอาจจะรายงานว่าสถานะปกติ (green) ทั้งที่ edge ในสิงคโปร์และเซาเปาโลกำลังตัดการเชื่อมต่ออยู่

ปริมาณทราฟฟิกวิดีโอทำให้ปัญหานี้แย่ลง ความล้มเหลวในระดับภูมิภาคที่พบบ่อย ได้แก่:

การตอบกลับ "200 OK" เพียงอย่างเดียวแทบไม่ได้บอกอะไรคุณเลย

กฎ 3 ข้อสำหรับสถานะความพร้อมใช้งาน (Health): เราก้าวข้ามการดูแค่ status code โดยเรากำหนดสถานะความพร้อมใช้งานผ่าน 3 ตัวชี้วัด:

วิธีแก้ปัญหา: การตรวจสอบแบบหลายภูมิภาค (Multi-Region Probing) เราเลิกใช้ตัวตรวจสอบขนาดใหญ่เพียงตัวเดียว แต่เปลี่ยนมาใช้ Go binaries ขนาดเล็กที่ติดตั้งบน VPS ราคาถูกในภูมิภาคต่างๆ แทน

ตัวตรวจสอบ (prober) แต่ละตัวจะ:

เราใช้ SQLite ในการจัดเก็บข้อมูล ซึ่งเรียบง่ายและรองรับภาระงานของเราได้โดยไม่มี overhead มากนัก เราจัดเก็บข้อมูลตัวอย่างดิบ (raw samples) แทนที่จะเป็นข้อมูลที่สรุปผลมาแล้ว เพื่อให้เราสามารถนำมาคำนวณคะแนนย้อนหลังหรือใช้ดีบั๊กความล้มเหลวเฉพาะจุดในภายหลังได้

เคล็ดลับ: ระบบฉันทามติ (Quorum) เครือข่ายมักจะมีสัญญาณรบกวน (noisy) แพ็กเก็ตที่หลุดไปเพียงหนึ่งแพ็กเก็ตไม่ได้หมายความว่าระบบล่ม

เราใช้ระบบ quorum เพื่อป้องกันการแจ้งเตือนที่ผิดพลาด (false alarms) เราจะประกาศว่า edge "ล่ม" (down) ก็ต่อเมื่อหลายภูมิภาคเห็นตรงกันเท่านั้น หากภูมิภาคหนึ่งพบความล้มเหลวแต่ภูมิภาคอื่นไม่พบ เราจะไม่แจ้งเตือนทีมงาน การตัดสินใจออกแบบเช่นนี้ช่วยลดการแจ้งเตือนที่ผิดพลาดลงได้ถึง 90%

บทเรียนสำคัญ:

คุณไม่จำเป็นต้องมีแพลตฟอร์ม observability ที่หนักอึ้ง สิ่งที่คุณต้องการคือ local probes, ข้อมูลดิบ และกฎที่ไม่ตื่นตระหนกไปกับ noise

ที่มา: https://dev.to/ahmet_gedik778845/building-a-multi-region-health-check-aggregator-for-video-cdn-edges-2865