השהיה מעריכית לפני ניסיון חוזר (exponential backoff)

השהיה מעריכית לפני ניסיון חוזר היא אסטרטגיה סטנדרטית לטיפול בשגיאות באפליקציות רשת, שבה לקוח מנסה שוב ושוב לשלוח בקשה שנכשלה, עם עלייה בהשהייה בין הבקשות. לקוחות צריכים להשתמש בהשהיה מעריכית לפני ניסיון חוזר לכל הבקשות ל-Memorystore for Valkey שמחזירות שגיאות עם קודי תגובה של HTTP 5xx ו-429.

חשוב להבין איך פועל השהיה מעריכית לפני ניסיון חוזר (exponential backoff) אם אתם יוצרים אפליקציות לקוח שמשתמשות ישירות ב-API בארכיטקטורת REST של Memorystore for Valkey.

אם אתם משתמשים במסוףGoogle Cloud , המסוף שולח בקשות ל-Memorystore for Valkey בשמכם ומטפל בכל השהיה לפני ניסיון חוזר (backoff) שנדרשת.

אלגוריתם לדוגמה

אלגוריתם של השהיה מעריכית לפני ניסיון חוזר (exponential backoff) מבצע ניסיון חוזר של בקשות באמצעות הגדלה אקספוננציאלית של זמן ההמתנה בין הניסיונות החוזרים, עד למשך ההשהיה המקסימלי. דוגמה:

  1. שליחת בקשה ל-Memorystore for Valkey.

  2. אם הבקשה נכשלת, צריך להמתין ‎1 + random_number_milliseconds‎ שניות ולנסות שוב את הבקשה.

  3. אם הבקשה נכשלת, צריך להמתין ‎2 + random_number_milliseconds‎ שניות ולנסות שוב את הבקשה.

  4. אם הבקשה נכשלת, צריך להמתין ‎4 + random_number_milliseconds‎ שניות ולנסות שוב את הבקשה.

  5. וכך הלאה, עד maximum_backoff פעמים.

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

where:

  • זמן ההמתנה הוא min(((2^n)+random_number_milliseconds), maximum_backoff), כאשר n גדל ב-1 בכל איטרציה (בקשה).

  • random_number_milliseconds הוא מספר אקראי של אלפיות שנייה שקטן מ-1,000 או שווה לו. זה עוזר למנוע מקרים שבהם לקוחות רבים מסתנכרנים בגלל מצב מסוים וכולם מנסים שוב בו-זמנית, ושולחים בקשות בגל מסונכרן. צריך לחשב מחדש את הערך של random_number_milliseconds אחרי כל בקשת ניסיון חוזר.

  • בדרך כלל, maximum_backoff הוא 32 או 64 שניות. הערך המתאים תלוי בתרחיש לדוגמה.

אפשר להמשיך לנסות שוב אחרי שמגיעים לזמן maximum_backoff. אחרי הנקודה הזו, אין צורך להמשיך להגדיל את זמן ההשהיה לפני ניסיון חוזר. לדוגמה, אם לקוח משתמש בזמן maximum_backoff של 64 שניות, אחרי שהערך הזה מושג, הלקוח יכול לנסות שוב כל 64 שניות. בשלב מסוים, צריך למנוע מהלקוחות לנסות שוב ושוב ללא הגבלה.

השהיה מקסימלית לפני ניסיון חוזר (backoff) והמספר המקסימלי של ניסיונות חוזרים שבהם הלקוח משתמש תלויים בתרחיש השימוש ובתנאי הרשת. לדוגמה, יכול להיות שלקוחות לנייד של אפליקציה יצטרכו לנסות שוב יותר פעמים ובמרווחי זמן ארוכים יותר בהשוואה ללקוחות במחשב של אותה אפליקציה.

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