מילון מושגים
Timeout / Retry / Exponential Backoff
נקרא גם: Timeout · Retry · Exponential Backoff · Backoff · Jitter · Retry Storm · פסק זמן · טיימאאוט · ניסיון חוזר · ניסיונות חוזרים · רטרי · באקאוף · המתנה מעריכית · ניסיון חוזר עם המתנה גדלה · למה הבקשה נתקעת · למה המערכת מנסה שוב ושוב · כשל זמני · Transient Fault
הסבר פורמלי#
Timeout הוא משך הזמן המרבי שמחכים להשלמת פעולה לפני שמחשיבים אותה ככושלת. Retry הוא ניסיון חוזר לפעולה שנכשלה בכשל זמני (transient fault), כזה שסביר שיצליח אם חוזרים אליו אחרי השהיה מתאימה. Exponential Backoff היא אסטרטגיה שבה זמן ההמתנה בין ניסיונות גדל באופן מעריכי. מוסיפים לה לעיתים Jitter, השהיה אקראית שמונעת מכמה לקוחות לנסות שוב באותו רגע.
התיעוד של Azure ושל AWS מדגישים כמה סייגים: מגבילים את מספר הניסיונות (בלי ניסיונות אינסופיים), ניסיון חוזר בטוח רק לפעולה אידמפוטנטית או כזו שנתמכת בהגנה מפני כפילות, ולא מנסים שוב בכל שכבה במקביל, כי העומס מוכפל (AWS מביאה דוגמה לגידול של פי 243 בעומס על מסד נתונים).
הסבר בגובה העיניים#
אתם מתקשרים לחבר והקו תפוס. Timeout הוא ההחלטה "אני מחכה עד 30 שניות ולא יותר". Retry הוא "אנסה שוב". Backoff הוא "אחכה דקה, אחר כך שלוש, אחר כך עשר", ולא אחזור ואחייג כל שנייה. ואם אלף אנשים מחייגים לאותו מספר בדיוק באותו הרגע, ההמתנה האקראית (Jitter) מפזרת אותם.
הסיכון: ניסיונות חוזרים הם, בלשון AWS, "אנוכיים", כי כל אחד צורך עוד קיבולת מהשרת. אם השרת כבר מתקשה, הוצאת ניסיונות מהירה עלולה להאריך את התקלה.
למה זה חשוב בפועל#
כשבונים אוטומציה או אפליקציה שקוראת ל-API (כולל API של מודל), בקשו שיוגדרו timeout, מספר ניסיונות מקסימלי והמתנה גדלה, ושלפעולות שמשנות מידע (תשלום, שליחת הודעה) תהיה הגנה מפני ביצוע כפול. ראו גם Rate Limiting.
תגיות#
- timeout
- retry
- backoff
- jitter
- resilience
מקורות#
- Amazon Builders' Library — Timeouts, retries, and backoff with jitter — ההגדרות, סיכון ה-retry storm והצורך באידמפוטנטיות.
- Microsoft Azure Well-Architected — Recommendations for handling transient faults — מילון המונחים והמלצות לניסיונות חוזרים.