השהיה מעריכית לפני ניסיון חוזר היא אסטרטגיה סטנדרטית לטיפול בשגיאות באפליקציות רשת, שבה לקוח מנסה שוב ושוב לשלוח בקשה שנכשלה, עם עלייה בהשהייה בין הבקשות. לקוחות צריכים להשתמש בהשהיה מעריכית לפני ניסיון חוזר לכל הבקשות ל-Memorystore for Valkey שמחזירות שגיאות עם קודי תגובה של HTTP 5xx ו-429.
חשוב להבין איך פועל השהיה מעריכית לפני ניסיון חוזר (exponential backoff) אם אתם יוצרים אפליקציות לקוח שמשתמשות ישירות ב-API בארכיטקטורת REST של Memorystore for Valkey.
אם אתם משתמשים במסוףGoogle Cloud , המסוף שולח בקשות ל-Memorystore for Valkey בשמכם ומטפל בכל השהיה לפני ניסיון חוזר (backoff) שנדרשת.
אלגוריתם לדוגמה
אלגוריתם של השהיה מעריכית לפני ניסיון חוזר (exponential backoff) מבצע ניסיון חוזר של בקשות באמצעות הגדלה אקספוננציאלית של זמן ההמתנה בין הניסיונות החוזרים, עד למשך ההשהיה המקסימלי. דוגמה:
שליחת בקשה ל-Memorystore for Valkey.
אם הבקשה נכשלת, צריך להמתין 1 +
random_number_milliseconds שניות ולנסות שוב את הבקשה.אם הבקשה נכשלת, צריך להמתין 2 +
random_number_milliseconds שניות ולנסות שוב את הבקשה.אם הבקשה נכשלת, צריך להמתין 4 +
random_number_milliseconds שניות ולנסות שוב את הבקשה.וכך הלאה, עד
maximum_backoffפעמים.ממשיכים להמתין ולנסות שוב עד שמגיעים למספר מקסימלי מסוים של ניסיונות חוזרים, אבל לא מגדילים את תקופת ההמתנה בין הניסיונות החוזרים.
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) והמספר המקסימלי של ניסיונות חוזרים שבהם הלקוח משתמש תלויים בתרחיש השימוש ובתנאי הרשת. לדוגמה, יכול להיות שלקוחות לנייד של אפליקציה יצטרכו לנסות שוב יותר פעמים ובמרווחי זמן ארוכים יותר בהשוואה ללקוחות במחשב של אותה אפליקציה.
אם הבקשות החוזרות נכשלות אחרי שמגיעים למספר המקסימלי של ניסיונות חוזרים, צריך לדווח על השגיאה או לתעד אותה באחת מהשיטות שמפורטות בקטע קבלת תמיכה.