Logo GH

Πολιτικές επαναπροσδιορισμού και επανεκκίνησης

Επαναλήψεις (επαναλήψεις) βοηθούν στην επιβίωση προσωρινών αποτυχιών, αλλά αν είναι εσφαλμένα διαμορφωμένες, προκαλούν χιονοστιβάδες της κυκλοφορίας, αντίγραφα των λειτουργιών και καταρρέουν. Μια αξιόπιστη πολιτική επαναπροσδιορισμού ξεκινά πάντα με προθεσμίες/χρονοδιαγράμματα, λαμβάνει υπόψη την ιδεατότητα και χρησιμοποιεί backoff + jitter.

1) Βασικές αρχές

1. Πρώτο χρονοδιάγραμμα/προθεσμία, στη συνέχεια υποχώρηση. Η επανάληψη χωρίς χρονικό περιορισμό απλώς επιμηκύνει την αποτυχία.
2. Επαναπροσδιορισμός - μόνο για ασφαλείς/ευφυείς λειτουργίες. Για τα επισφαλή στοιχεία - μέσω της ιδεατότητας-κλειδιών και εγγυήσεων συναλλαγών.
3. Το backoff είναι υποχρεωτικό. Εκθετική ή παρόμοια με GCRA με νευρικότητα για την αποσυγχρονισμό κυμάτων.
4. Περιορισμός του αριθμού των προσπαθειών και του συνολικού χρόνου του προϋπολογισμού. Μη αφήσετε το SLO του χρήστη.
5. Σεβασμός των σημάτων υποδομής. '429/503' + 'Retry-After', κατάσταση διακόπτη κυκλώματος, όρια αναμονής.

2) Χρονοδιαγράμματα και προθεσμίες (διάδοση προθεσμίας)

Ζητήστε χρονοδιάγραμμα <υπηρεσία SLO, η προθεσμία πολλαπλασιάζεται κάτω από την αλυσίδα (κεφαλίδες HTTP/πλαίσιο gRPC).
Σύνθεση χρονοδιαγράμματος: συνολική (πρώτη προσπάθεια + εφεδρική + επακόλουθη) ≤ προθεσμία χρήσης.
Διαφορετικά χρονικά περιθώρια για αναγνώσεις/εγγραφές: οι εγγραφές είναι συντομότερες και αυστηρότερες. διαβάζει επιτρέπει την αντιστάθμιση.

3) Ιδιαιτερότητα και ασφαλείς επαναλήψεις

Διαβάζει (GET/idempotent RPC): επαναλαμβάνεται με ασφάλεια με '5xx', 'UNAVAILABLE', timeouts δικτύου.

Αρχεία:
  • Χρήση 'Idempotency-Key' (HTTP) ή ταυτότητα αίτησης στα σύνορα. ο εξυπηρετητής πρέπει να απολυμαίνεται.
  • Γράψτε idempotent handlers: "upser ," τουλάχιστον μία φορά "+ αποζημίωση (saga).
  • Εξωτερικές πληρωμές/διακανονισμοί - μόνο με ταυτόσημα κλειδιά και ημερολόγιο συναλλαγών.

4) Εφεδρικοί αλγόριθμοι

Εκθετική: 'base 2 προσπάθεια', που οριοθετείται από 'max _ backoff'.
Διακοσμημένη Jitter (πλήρης/ίση νευρικότητα) - τυχαιότητα στην περιοχή για να αποσυγχρονίσει τους πελάτες.
Καθυστερήσεις τύπου GCRA/Token-Bucket: σύμφωνες με τα όρια των επιτοκίων.
Σύνορα: 'αρχικό _ backoff' (50-200 ms: 200-500 ms εγγραφές), 'max _ backoff' (1-5 s), 'max _ paped' (για παράδειγμα, 3-10 s).

Το προτεινόμενο μοτίβο είναι εκθετική backoff + πλήρης νευρικότητα.

5) Επαναλάβετε/Μην επαναλάβετε πολιτικές απόφασης

Επαναλαμβάνουμε στη διεύθυνση:
  • Σφάλματα/χρονοδιαγράμματα δικτύου, '429' (με σεβασμό 'Retry-After'), 'soft' '5xx' ('502/503/504'), gRPC 'UNAILABLE/DATE _ OVERED'.
Μην επαναλάβετε όταν:
  • '4xx' (εκτός από '409/429/408' σε ορισμένα σενάρια), επιχειρηματικά σφάλματα, '401/403', σφάλματα επικύρωσης, ρητή 'DoNotRetry' flag.
Έξυπνες εξαιρέσεις:
  • '409 Σύγκρουση' - μερικές φορές επαναλαμβάνεται με καθυστέρηση μετά από συναίνεση/κλείδωμα.
  • '404' for μόνιμα συνεπής διαβάζει - μία ή δύο φορές retray με ένα μικρό backoff.

6) Καλύμματα νομισμάτων και «καταιγίδα αναδρομής»

Περιορισμός των ταυτόχρονων επαναλήψεων ανά πελάτη/ανά ενοικιαστή/ανά τελικό σημείο.
Συνολικό όριο προσπαθειών ανά αίτηση (π.χ. 2-3).
Επιβράδυνση των θερμών τελικών σημείων μέσω του ελέγχου εισόδου ώστε να μην φουσκώνουν οι ουρές.

7) Αλληλεπίδραση με διακόπτη και όρια κυκλώματος

Αν η CB είναι ανοιχτή, μην εκτελέσετε απευθείας retrays - πηγαίνετε στην οπισθοπορεία ή περιμένετε για «ημι-ανοιχτά» δείγματα.
Στο '429' - σεβασμός 'Retry-After', εάν όχι, χρησιμοποιήστε το «μαλακό» εφεδρικό.
Τα retrays μπορούν να αυξήσουν το στέλεχος. να εφαρμόζουν προσαρμοστικά κατώτατα όρια (χαμηλότερα 'max _ απόπειρες' για ένα περιστατικό).

8) Πρωτόκολλα και συμβάσεις

HTTP

Κωδικοί: '408/429/5xx'.
Κεφαλίδες: 'Retry-After', οικογένεια ' Limit-', 'Idempotency-Key', 'Request-Id'.
Ο πελάτης πρέπει να στείλει 'X-Request-Timeout '/' Date-At' (εάν ναι).

gRPC

Χρήση του πλαισίου με προθεσμία· τηρούν τις «ΜΗ ΔΙΑΘΈΣΙΜΕς», «ΠΡΟΘΕΣΜΙΑ _ ΥΠΕΡΒΑΣΗ», πολιτικές επαναπροσδιορισμού ανά μέθοδο.
Για idempotent RPC, περιλαμβάνονται retrays. για μεταλλάξεις - μόνο με υποστήριξη ιδεατότητας.

9) Ουρές αναμονής, βασικά καθήκοντα και ολοκλήρωση

Τουλάχιστον μία φορά χειριστές → idempotent actions, key deduplication.
Καθυστέρηση αναμονής για εφεδρικές απόπειρες (π.χ. 5s/30s/2m).
Σειρά αναμονής νεκρών γραμμάτων (DLQ) με όριο προσπαθειών και χειροκίνητη επεξεργασία.
Outbox/CDC - έτσι ώστε οι επαναλήψεις να μην θέτουν σε κίνδυνο την ακεραιότητα των συναλλαγών.

10) Αντιστάθμιση έναντι επαναγορών

Η αντιστάθμιση είναι χρήσιμη για εξαιρετικά κρίσιμες διαβάσεις στην καθυστέρηση της ουράς.
Όριο: όχι περισσότερο από X% των αιτήσεων, καθυστέρηση έναρξης (για παράδειγμα, p95 καθυστέρηση), ακύρωση των ηττημένων.
Δεν εφαρμόζεται αντιστάθμιση για πράξεις εγγραφής χωρίς ισχυρή ταυτότητα.

11) Τηλεμετρία και παρατηρησιμότητα

: 'tenant _ i ,' endpoint ',' track ',' decision '(retry/skip),' reason ',' backoff _ m , 'deadline _ m ,' idempotency _ key '.
Μετρήσεις: μερίδιο των υποχωρήσεων, επιτυχία μετά τις υποχωρήσεις, p95/p99 «end-to-end», αριθμός υπερβάσεων προθεσμιών, CB ενεργοποίηση.
Αρχεία καταγραφής ελέγχου: άνω «θορυβώδη» πλήκτρα/τελικά σημεία, συσχετισμός με 429/503.

12) Δοκιμές και χάος

Προφίλ: «saw» (burst-lull), «storm» (mass timeouts), «sticky» σφάλματα (every Nth), latency ουρές.
Περιορισμός Torus/βλάβες μνήμης/ουράς αναμονής, ρολόι-skew.
Ελέγχει αν η συνολική διάρκεια (απόπειρες + εφεδρικές) εντάσσεται στο 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) Κατάλογος ελέγχου πριν από την πώληση

  • Οι προθεσμίες πολλαπλασιάζονται μέσω κλήσεων. συνολική διάρκεια του SLO ≤.
  • Αλγόριθμος εφεδρείας με νευρικότητα. παράμετροι επικυρωμένες με δοκιμή φορτίου.
  • IDempotence: κλειδιά/κούτσουρα/αντισταθμίσεις για εγγραφές.
  • Οι πολιτικές επαναπροσδιορισμού διαφέρουν για τις αναγνώσεις και τα αρχεία. σεβασμός 'Retry-After'.
  • Η ανταγωνιστικότητα του επαναπροσδιορισμού και ο συνολικός αριθμός των προσπαθειών είναι περιορισμένες.
  • Η ενσωμάτωση με διακόπτη κυκλώματος και τα όρια ταχύτητας είναι διαμορφωμένα.
  • Τηλεμετρία: ετικέτες, μετρήσεις, καταγραφές λογικών. ταμπλό p95/p99, μερίδιο επιτυχίας μετά τις επαναλήψεις.
  • Δοκιμές «καταιγίδων» και ουρών με καθυστέρηση, DLQ για εργασίες.
  • Τεκμηρίωση πελατών: κωδικοί/τίτλοι, παραδείγματα εφεδρείας και ακύρωσης.

16) Τυπικά σφάλματα

Οι επαναλήψεις χωρίς χρονοδιαγράμματα/προθεσμίες είναι «αιώνιες προσδοκίες».
Σταθερές παύσεις χωρίς νευρικότητα - συγχρονισμένα κύματα και αυτο-σαμποτάζ DDoS.
Επαναλήψεις μη ασφαλών εγγραφών χωρίς ιδεατότητα - αντίγραφα και αποσυγχρονισμός.
Αγνοώντας τα σήματα «Retry-After» και CB - κλιμακούμενο περιστατικό.
Σημεία συμφόρησης στις ουρές αναμονής λόγω έλλειψης ανώτατων ορίων και ελέγχου εισόδου.
Έλλειψη τηλεμετρίας των λόγων/λύσεων των retrays - «τυφλή πτήση».

17) Γρήγορες συνταγές

Η δημόσια API αναφέρει: 3 απόπειρες, 'αρχικά = 100m ,' max = 1s ', πλήρης νευρικότητα, αντιστάθμιση μέχρι 5% της κίνησης.
Κρίσιμες εγγραφές (πληρωμή): 1-2 max απόπειρες, αυστηρό χρονοδιάγραμμα, υποχρεωτικό «Idempotency-Key», καμία αντιστάθμιση.
Εξωτερικές ενότητες: σεβασμός '429/Retry-After', 'max _ απόπειρες = 3', 'max _ backoff = 2-5', εξερχόμενα όρια ροής.
Βασικές εργασίες: καθυστέρηση-backoff (5s → 30s → 2m), DLQ, idempotent handers.

Συμπέρασμα

Μια καλή πολιτική επανάληψης είναι η ισορροπία μεταξύ ταχείας ανάκαμψης και ελεγχόμενης αποτυχίας. Οι προθεσμίες, η ταυτότητα, η εκθετική εφεδρεία με νευρικότητα, ο περιορισμός του ανταγωνισμού και ο σεβασμός των σημάτων υποδομής μετατρέπουν τα retrays από μια «καταιγίδα» σε ένα εργαλείο για τη βελτίωση της αξιοπιστίας και της διατήρησης του SLO.

Contact

Επικοινωνήστε μαζί μας

Επικοινωνήστε για οποιαδήποτε βοήθεια ή πληροφορία.Είμαστε πάντα στη διάθεσή σας.

Telegram
@Gamble_GC
Έναρξη ολοκλήρωσης

Το Email είναι υποχρεωτικό. Telegram ή WhatsApp — προαιρετικά.

Το όνομά σας προαιρετικό
Email προαιρετικό
Θέμα προαιρετικό
Μήνυμα προαιρετικό
Telegram προαιρετικό
@
Αν εισαγάγετε Telegram — θα απαντήσουμε και εκεί.
WhatsApp προαιρετικό
Μορφή: κωδικός χώρας + αριθμός (π.χ. +30XXXXXXXXX).

Πατώντας «Αποστολή» συμφωνείτε με την επεξεργασία δεδομένων.