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