Backpressure - כשלא אומרים "כן" לכול

📚 כשהתקשורת נשברת - חלק 5 תקשורת #Backpressure
תוכן עניינים

Backpressure - כשלא אומרים “כן” לכול

אחרי שראינו למה מערכות נשברות מ-spikes ולא מעומס קבוע, עולה שאלה לא נוחה אך הכרחית:

מה קורה כשהמערכת פשוט לא מסוגלת לעמוד בקצב?

האינסטינקט הנפוץ הוא: לנסות לעמוד בזה בכל מחיר.

וזו בדיוק הבעיה.

מערכות שלא יודעות להגיד “לא”

מערכת שמנסה לקבל כל בקשה:

  • מחזיקה תורים הולכים ומתארכים
  • גוררת Latency גבוה לכל הבקשות
  • ומעמיסה גם על רכיבים בריאים

היא אולי אדיבה - אבל היא מסוכנת.

כי במקום להיכשל מוקדם ומקומית, היא גורמת לכשל רחב ואיטי.

מה זה בעצם Backpressure

Backpressure הוא עיקרון פשוט אך לא אינטואיטיבי:

כאשר רכיב במורד השרשרת מתקשה - הוא מאותת לרכיב שמעליו להאט, לדחות, או לעצור.

לא להעמיס עוד. לא “להסתדר איכשהו”. אלא לשקף את המציאות.

זהו מנגנון שבו הקצב מוכתב על-ידי החוליה החלשה, ולא על-ידי מי ששולח הכי מהר.

למה Backpressure מרגיש לא טבעי

כי הוא מנוגד לאינטואיציה של שירות.

קל יותר לחשוב:

  • “נכניס לתור ונפתור אחר כך”
  • “לא נאכזב עכשיו”
  • “המערכת תתאושש”

אבל בפועל, כל בקשה שנכנסת בזמן עומס היא התחייבות עתידית.

Backpressure הוא הבחירה לא להתחייב.

איפה שמים Backpressure

Backpressure אינו רכיב אחד - הוא החלטה על גבול.

אפשר לממש אותו ב:

  • דחיית בקשות בשער הכניסה
  • הגבלת קצב בין רכיבים
  • החזרת שגיאה מהירה במקום המתנה
  • או עצירה זמנית של קבלת בקשות מתור

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

ההבדל בין דחייה לשבירה

יש הבדל קריטי בין:

להגיד “לא עכשיו” לבין: להגיד “כן” ואז לא לעמוד בזה

דחייה:

  • פוגעת בחלק מהבקשות
  • שומרת על המערכת
  • ומאפשרת התאוששות מהירה

שבירה:

  • פוגעת בכולן
  • יוצרת אי-יציבות
  • ומובילה לקריסות שרשרת

Backpressure הוא הבחירה בדחייה מבוקרת על פני שבירה כללית.

המשל

אפשר לחשוב על מעלית.

אם היא מלאה, היא פשוט לא נסגרת על עוד אנשים.

היא לא מנסה “להסתדר”, לא לוחצת יותר חזק, ולא מקווה שמשהו יקרה.

היא לא מסתכנת בכך שתפסיק לעבוד מרוב עומס.

היא מגבילה - וכך נשארת בטוחה.

Backpressure כעיקרון תרבותי

מערכות שיש בהן Backpressure משדרות:

  • גבולות ברורים
  • עדיפות ליציבות על פני נימוס
  • והבנה שעומס הוא חלק מהחיים

מערכות שאין בהן Backpressure נשענות על תקווה.

ובפרודקשן, תקווה אינה אסטרטגיה. היא סיכון.

מבט קדימה

Backpressure עוצר את הזרימה - אבל הוא לא פותר הכול.

כי גם תור “מבוקר” הוא עדיין תור.

ובשלב מסוים צריך לשאול: מה המחיר של ההמתנה עצמה?

בפוסט הבא נצלול לנקודה הזו בדיוק: למה Queue אינו פתרון - אלא התחייבות עתידית שעלולה להפוך לחוב.

תגובות