הנחת היסוד המסוכנת - הרשת אמינה "ברוב הזמן"
הנחת היסוד המסוכנת - הרשת אמינה “ברוב הזמן”
אחת ההנחות השקטות ביותר במערכות תקשורת - ואחת המסוכנות ביותר - היא ההנחה ש”ברוב הזמן הכול עובד”.
לא נאמרת במפורש, לא נכתבת במסמך ארכיטקטורה, אבל כמעט כל מערכת נשענת עליה.
והיא כמעט תמיד שגויה.
”ברוב הזמן” אינו מושג הנדסי
ברוב הזמן הוא ניסוח אנושי, לא מערכתי.
מערכות אינן חוות זמן כמו בני אדם. הן חוות:
- קצבים
- הסתברויות
- ותלות בין אירועים
כשל שמתרחש ב-0.1% מהזמן אינו “נדיר” אם המערכת מטפלת במיליוני בקשות ביום.
בסקייל, זניח הופך לשגרה.
למה הרשת אף פעם לא באמת אמינה
רשת אמיתית מורכבת מ:
- קישורים
- תורים
- נתיבים משתנים
- ורכיבים עצמאיים עם חיים משלהם
אין נקודה אחת שבה “הכול תקין”. יש רק רגעים שבהם לא רואים את הכשל.
Latency עולה ויורד, Packets נעלמים וחוזרים, ותורים מתמלאים בלי להכריז על כך.
הרשת לא נשברת - היא מתנדנדת.
הבעיה אינה הכשל - אלא ההנחה
כשלי רשת אינם הבעיה המרכזית. הבעיה היא שמערכות רבות אינן מתוכננות לצפות להם.
הנחות נפוצות:
- אם לא קיבלנו שגיאה - הכול בסדר
- אם הבקשה איטית - זו בעיה זמנית
- אם זה עובד עכשיו - זה יעבוד גם בעוד רגע
אלו הנחות פסיכולוגיות, לא הנדסיות.
כשל חלקי הוא ברירת המחדל
ברשת:
- חלק מהמערכת תמיד בפיגור
- חלק תמיד בעומס
- וחלק תמיד מתאושש ממשהו
אין רגע של שלמות.
מערכת בריאה אינה כזו שאין בה כשל - אלא כזו שמתנהגת בצורה צפויה גם כשהכשל כבר כאן.
המשל
אפשר לחשוב על כביש בין-עירוני.
אין שעה ביום שבה אין האטה איפשהו: עבודות, תאונה קלה, עומס רגעי.
מי שמתכנן נסיעה בהנחה שהכביש “פנוי ברוב הזמן” - יגיע לפעמים בזמן, ולפעמים באיחור בלי להבין למה.
מי שמתכנן בהנחה שתמיד יש חיכוך - מתכנן אחרת.
ההשלכה המערכתית
הנחת אמינות מובילה ל:
- Timeouts אגרסיביים מדי
- Retries לא מבוקרים
- ותכנון שמתפרק בקצה
לעומת זאת, תכנון שמניח חוסר אמינות:
- מגביל נזק
- בולם תגובות שרשרת
- ומייצר יציבות גם תחת לחץ
נקודת המוצא החדשה
הסדרה המתקדמת הזו יוצאת מהנחה אחת בלבד:
הרשת אינה אמינה - וגם לא תהיה.
כל השאלות הבאות - Timeouts, Retries, Backpressure, Consistency - נובעות מההנחה הזו.
בפוסט הבא נצלול להחלטה הראשונה שנולדת ממנה: איך קובעים Timeout - ולמה זו אחת ההחלטות הכי לא מדעיות במערכת.
📚 פוסטים נוספים בסדרה: כשהתקשורת נשברת
- חלק 0 כשהתקשורת נשברת - הנדסה תחת עומס, כשל ואי-ודאות
- חלק 2 Timeouts - ההחלטה הקשה ביותר בתקשורת
- חלק 3 Retries - מנגנון התאוששות או מכפיל נזק
- חלק 4 Load אינו אויב - Spikes כן
- חלק 5 Backpressure - כשלא אומרים "כן" לכול
- חלק 6 Queue אינו פתרון - הוא התחייבות
- חלק 7 Ordering - למה סדר הוא מותרות יקרות
- חלק 8 Idempotency - לתכנן כאילו הכול יישלח פעמיים
- חלק 9 Consistency מול Availability - לא תיאוריה, אלא בחירה יומיומית
- חלק 10 RPC, Messaging, Streaming - שלוש פילוסופיות תקשורת
- חלק 11 Stateless זה לא שאין State - זה איפה הוא נמצא
- חלק 12 תקשורת כמשקפת תרבות הנדסית
- חלק 13 מערכות שמחזיקות - לא בגלל שהן חכמות, אלא בגלל שהן צנועות
- חלק 14 מה למדנו - מפת הדרך של הסדרה כולה