בניית אגרגטור Health-Check רב-אזורי

משתמש ב-São Paulo נתקל ב-edge node שאינו מגיב. הוא לא מגיש דיווח על תקלה. הוא פשוט סוגר את הלשונית וצופה במשהו אחר.

מנטר uptime רגיל יפספס את זה. רוב המנטרים מבצעים probing ממיקום יחיד. מאותה נקודה אחת, הכל נראה ירוק.

דף הסטטוס שלנו נהג להציג 100% uptime בזמן שמשתמשים אמיתיים חוו timeouts. בדיקת תקינות (health check) גלובלית אחת שיקזה לנו שקר.

הנה איך בנינו מערכת שאומרת את האמת.

הבעיה: הטיות דגימה (Sampling Bias) אם המנטר שלכם נמצא במרכז נתונים אחד, הוא רואה רק מציאות אחת. אתם עלולים לדווח על מצב "ירוק" גם אם ה-edges שלכם בסינגפור וב-São Paulo מנתקים חיבורים.

תעבורת וידאו מחמירה את המצב. כשלים אזוריים נפוצים כוללים:

תגובת "200 OK" בודדת כמעט לא אומרת לכם דבר.

שלושת הכללים שלנו לבדיקת תקינות: עברנו מעבר לקודי סטטוס. אנחנו מגדירים תקינות באמצעות שלושה מדדים:

הפתרון: Probing רב-אזורי הפסקנו להשתמש במנטר אחד גדול. במקום זאת, אנו פורסים קבצי binary קטנים בשפת Go על גבי מופעי VPS אזוריים וזולים.

כל prober:

אנחנו משתמשים ב-SQLite לאחסון. הוא פשוט ומטפל בעומס שלנו ללא overhead. אנחנו שומרים דגימות גולמיות (raw samples) במקום נתונים שעברו אגרגציה מראש. זה מאפשר לנו לבצע re-score להיסטוריה או לדבג כשלים ספציפיים מאוחר יותר.

הסוד: Quorum רשתות הן רועשות. חבילה (packet) אחת שאבדה אינה מהווה השבתה.

אנחנו משתמשים במערכת quorum כדי למנוע התראות שווא. אנחנו מכריזים על edge כ-"down" רק כאשר מספר אזורים מסכימים על כך. אם אזור אחד מזהה כשל אך אחרים לא, אנחנו לא שולחים page לצוות. בחירה עיצובית זו הסירה 90% מהתראות השווא

אתה לא צריך פלטפורמת observability כבדה. אתה צריך probes מקומיים, נתונים גולמיים, וחוק שמסרב להיכנס לפאניקה בגלל רעש.

מקור: https://dev.to/ahmet_gedik778845/building-a-multi-region-health-check-aggregator-for-video-cdn-edges-2865