Logo GH

ניסיון חוזר ומדיניות חזרה

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

1) עקרונות בסיסיים

1. פסק זמן/מועד ראשון, ואז לסגת. חזרה ללא מגבלת זמן רק מאריכה את הכישלון.
2. מגש - רק לפעולות בטוחות/אידאמפוטנטיות. עבור אלה חסרי ביטחון - באמצעות אידמפוטנטיות מפתחות והעברות ערבויות.
3. גיבוי הוא חובה. מעריכי או דמוי GCRA עם ג 'יטר כדי לדכא גלים.
4. הגבלת מספר הניסיונות וזמן התקציב הכולל. אל תשאיר את ה-SLO של המשתמש.
5. כבד אותות תשתית. 429/503 '+' Retry-After ', מעמד מפסק מעגל, גבולות תור.

2) פסקי זמן ומועדים (התפשטות המועד האחרון)

מבקש פסק זמן <SLO Service, המועד האחרון מתפשט במורד השרשרת (HTTP headers/gRPC context).
הרכב זמן: סה "כ (ניסיון ראשון + חזרה + לאחר מכן) לוח זמנים למשתמש.
פסקי זמן שונים לקריאה/רישומים: הרשומות קצרות ומחמירות יותר; קריאות מאפשרות גידור.

3) אידמפוטנטיות וחזרה בטוחה

קורא (GET/Idempotent RPC): חוזר בבטחה עם '5xx', 'לא זמין', פסקי זמן רשת.

רשומות:
  • השתמש 'Idempotency-Key' (HTTP) או בקשה-זיהוי על הגבול; השרת חייב לשכפל.
  • כתבו מפעילים מפוקפקים: ”עצבניים”, ”לפחות פעם אחת” + פיצוי (סאגה).
  • תשלומים חיצוניים/התנחלויות - רק עם מפתחות אידמפוטנטים ויומן עסקה.

4) אלגוריתמי גיבוי

אקספוננציאלי: ”base 2 ıtense”, מחובר על ידי ”max _ backoff”.
Jitter מעוצב (jitter מלא/שווה) - אקראיות בטווח כדי לדכא לקוחות.
עיכובים של GCRA/Token-Bucket: בקנה אחד עם מגבלות קצב.
גבולות: ”persional _ backoff” (50-200 ms קורא; 200-500 ms רשומות), ”max _ backoff” (1-5 s), ”max _ elapsed” (לדוגמה, 3-10 s).

התבנית המומלצת היא גיבוי אקספוננציאלי + לחץ מלא.

5) חזור/אל תחזור על מדיניות ההחלטה

אנחנו חוזרים על:
  • שגיאות רשת/פסקי זמן, '429' (בכבוד 'Retry-After'), '5xx' ('502/503/504'), 'GRPC' UNAVAILABLE/LADINE _ OXED '.
אל תחזור מתי:
  • '4xx' (למעט '409/429/408' בתרחישים מסוימים), טעויות עסקיות, '401/403', טעויות אימות, מפורשות 'DoNotRetry' flag.
יוצא מן הכלל חכם:
  • סכסוך 409 - לפעמים חוזר על עצמו עם עיכוב אחרי קונצנזוס/מנעולים.
  • '404 &posship לקריאה עקבית לצמיתות - אחד או שניים מגש מחדש עם גיבוי קטן.

6) כובעי קונקורנסי ו ”סערת מגש מחדש”

הגבל מגשים מחדש בו זמנית ללקוח/לדייר/לכל נקודה.
הגבלה כוללת של ניסיונות לכל בקשה (למשל. 2-3).
האט נקודות קצה חמות דרך בקרת כניסה כדי לא לנפח תורים.

7) אינטראקציה עם שובר מעגלים ומגבלות

אם CB פתוח, אל תבצע מגשים מחדש ישירות - עבור לנמלים או חכה לדגימות חצי פתוחות.
ב- '429' - כבוד 'Retry-After'; אם לא, להשתמש ”רך” גיבוי.
מגשים מחדש יכולים להגביר את הלחץ; הפעלת סף הסתגלות (למטה "max _ nessions' לתקרית).

8) פרוטוקולים וחוזים

HTTP

קודים: ”408/429/5xx”.
כותרות: "Retry-After", משפחה "EbetLimit-", "Idempotency-Key", "בקשה-Id'.
הלקוח חייב לשלוח ”X-Request-Timeout'/” Deadline-At' (אם כן).

gRPC

השתמש בהקשר עם תאריך יעד; כבוד 'לא זמין', 'דדליין _ חרג', מגש מדיניות לכל שיטה.
עבור RPCs idempotent, כולל מגשים מחדש; למוטציות - רק עם תמיכת אידמפוטנטיות.

9) תורים, משימות רקע ואינטגרציה

לפחות פעם אחת מפעילים פעולות אידמפוטנטיות, שכפול מפתח.
השהיית תור עבור גיבוי בין ניסיונות (לדוגמה, 5s/30/2m).
תור אותיות מתות (DLQ) עם מגבלה של ניסיונות ועיבוד ידני.
יוצא מן הכלל/המרכז לבקרת מחלות, כך שההצגות החוזרות לא יפגעו בשלמות העסקית.

10) גידור נגד רטרי

גידור הוא שימושי לקריאות ביקורתיות מאוד באיחור בזנב.
הגבלה: לא יותר מ-X% מהבקשות, השהיית סטארט-גרייס (לדוגמה, p95 latency), ביטול המפסידים.
אל תחיל גידור כדי לכתוב פעולות ללא אידמפוטנציה חזקה.

11) טלמטריה ויכולת תצפית

Tetry/skip: ”terenant _ id',” endpoint', ”transit”, ”retry/skip”, ”backoff _ ms',” deadline _ ms', ”idempotency _ key”.
Metrics: נתח של נסיגות, הצלחה לאחר נסיגות, p95/p99 ”מקצה אל קצה”, מספר מועדי מעבר, CB מפעיל.
רישומי ביקורת: N עליון ”רועש” מפתחות/נקודות קצה, קורלציה עם 429/503.

12) בדיקה ותוהו ובוהו

פרופילים: ”ראה” (burst-lull), ”סערה” (mass timeouts), שגיאות ”דביקות” (כל נ '), זנבות.
מגביל טורוס/מטמון/תור כשלים, שעון רזה.
בודק שהמשך הכולל (ניסיונות + גיבוי) מתאים ל ־ SLO.

13) מדיניות פסאודוקודה

pseudo handle(req, deadline):
attempt = 0 backoff = initial()
while attempt < MAX_ATTEMPTS and now() < deadline:
attempt += 1 with timeout(per_attempt_timeout(deadline, attempt)):
try:
resp = call(req)
if isRetryableStatus(resp): raise Retryable(resp. status)
return resp except Retryable as e:
if circuit. isOpen(dep) or! isIdempotent(req): break sleep(jitter(backoff))
backoff = min(exp(backoff), MAX_BACKOFF)
except NonRetryable:
break return fail_or_fallback(req)

14) תבנית הגדרות (דוגמה)

yaml retries:
default:
max_attempts: 3 initial_backoff_ms: 150 max_backoff_ms: 2000 strategy: exponential_full_jitter respect_retry_after: true per_attempt_timeout_fraction: 0. 4 # 40% of remaining deadline hedging:
enabled: false read_heavy:
max_attempts: 4 initial_backoff_ms: 80 max_backoff_ms: 1200 hedging:
enabled: true start_after_p95_ms: 300 max_extra_requests_ratio: 0. 05 write_strict:
max_attempts: 2 initial_backoff_ms: 250 max_backoff_ms: 1000 idempotency_required: true

limits:
concurrent_retries_per_tenant: 100 concurrent_retries_per_endpoint: 20

15) רשימת בדיקות לפני המכירה

[ ] מועדים מתרבים באמצעות שיחות; משך כולל של חקירת סלו.
[ אלגוריתם ] Backoff עם jitter; פרמטרים מאומתים על ידי בדיקת עומס.
[ ] IDEMPOTENCE: מפתחות/רישומים/פיצויים עבור רשומות.
[ ] מדיניות ריטריי שונה לקריאה ולרשומות; כבוד 'מחדש-אחרי'.
[ ] תחרותיות ריטריי ומספר הניסיונות הכולל מוגבל.
[ ] אינטגרציה עם מפסק מעגל וגבולות קצב מוגדרים.
[ טלמטריה ]: תגיות, מדדים, יומני סיבה; לוחות מחוונים p95/p99, נתח של הצלחה לאחר מגשים מחדש.
[ ] בדיקות של ”סערות” וזנבות, DLQ למשימות.
[ תיעוד לקוח ]: קודים/כותרים, דוגמאות גיבוי וביטול.

16) שגיאות אופייניות

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

17) מתכונים מהירים

API ציבורי קורא: 3 ניסיונות, "ראשוני = 100 מ" מ "," מקסימום = 1 ", עצבני מלא, מגדר עד 5% מהתנועה.
רשומות קריטיות (תשלום): 1-2 ניסיונות מקסימליים, פסק זמן קפדני, חובה 'Idempotency-Key', אין גידור.
אינטגרציה חיצונית: כיבוד '429/Retry-After', 'max _ transes = 3', 'max _ backoff = 2-5', מגבלות זרימה יוצאות.
משימות רקע: עיכוב-Backoff (50 = 30 = 2 מטר), DLQ, מפעילים אידמפוטנטים.

סיכום

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

Contact

צרו קשר

פנו אלינו בכל שאלה או צורך בתמיכה.אנחנו תמיד כאן כדי לעזור.

Telegram
@Gamble_GC
התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

בלחיצה על הכפתור אתם מסכימים לעיבוד הנתונים שלכם.