Logo GH

重復和備份策略

重播(retries)有助於在時間故障中幸存下來,但是如果設置不當,則會導致流量雪崩、操作重復和級聯下降。可靠的撤退政策總是從截止日期/時間開始,考慮冪等性,並使用backoff+jitter。

1)基本原則

1.首先是定時/截止日期,然後是轉發。沒有時間限制的重播只會延長故障。
2.Retray-僅用於安全/等效操作。對於不安全的-通過idempotency-keys和事務性保修。
3.Backoff是強制性的。指數或GCRA樣的Jitter以同步波。
4.限制嘗試次數和總預算時間。不要為用戶的SLO退出。
5.尊重基礎設施信號。「429/503」+「Retry-After」,電路中斷器的狀態,隊列限制。

2)Taymauts和截止日期(截止日期)

請求定時<SLO服務,截止日期沿鏈傳播(HTTP 標題/gRPC context)。
Taymauts的組成:總計(第一次嘗試+backoff+以後)≤自定義的截止日期。
閱讀/記錄的不同時間:記錄更短,更嚴格;讀數允許拼寫。

3)相似性和安全重播

閱讀(GET/IDEMPC):在「5xx」、「UNAVAILABLE」、網絡時間表中安全重復。

記錄:
  • 在邊界上使用「Idempotency-Key」(HTTP)或request-ID;服務器必須進行重復數據消除。
  • 寫出等效處理程序:「upsert」,「at-least-once」+補償(傳奇)。
  • 外部付款/互惠-僅具有偶數密鑰和運營日誌。

4)backoff算法

Exponential:「base 2^attempt」,限於「max_backoff」。
Decorrelated Jitter (full/equal jitter):用於客戶端同步的範圍隨機性。
GCRA/Token-Bucket之類的延遲:與等級限制一致。
邊界:「initial_backoff」(50-200毫秒閱讀;200-500 ms記錄),「max_backoff」(1-5 s),「max_elapsed」(例如3-10 s)。

推薦模板:指數backoff+full jitter。

5)決定「重復/不重復」的政策"

我們在以下方面重復:
  • 網絡錯誤/時間限制,「429」(尊重'Retry-After'),「軟」「5xx」(「502/503/504」),gRPC 「UNAVAILABLE/DEADLINE_EXCEED」。
我們不要重復以下內容:
  • 「4xx」(某些腳本中的「409/429/408」除外),業務錯誤,「401/403」,驗證錯誤,顯然是「DoNotRetry」標誌。
聰明的例外:
  • '409 Conflict'-有時在共識/鎖定後延遲重播。
  • eventually consistent reading的「404」是帶有小背景的一到兩倍的回程。

6)Concurrency caps和「暴風雨撤退」

限制同步per-client/per-tenant/per-endpoint中繼。
請求嘗試的總限制(例如2-3)。
通過管理控制來制動「熱」結束點,以免排隊。

7)與Circuit Breaker和限制互動

如果CB打開,請不要直接執行retrai-返回或等待「半打開」樣本。
在「429」-尊重「Retry-After」;如果沒有它-應用「軟」backoff。
Retrai可以增加負載;應用自適應閾值(在事件中降低「max_attempts」)。

8)協議和合同

HTTP

編碼:「408/429/5xx」。
標題:「Retry-After」,「RateLimit-」家族,「Idempotency-Key」,「Request-Id」。
客戶必須發送「X-Request-Timeout」/「Deadline-At」(如果接受的話)。

gRPC

使用截止日期上下文;尊重「UNAVAILABLE」,「DEADLINE_EXCEED」,每種方法的復制品。
對於冪等的RPC-包括復古;對於突變-僅支持冪等。

9)隊列、背景任務和集成

One-least-once處理程序→等效操作、按鍵重復數據消除。
延遲時間用於嘗試之間的後退(例如5s/30 s/2m)。
Dead-letter queue(DLQ)具有嘗試和手動處理限制。
Outbox/CDC-確保重播不會破壞事務完整性。

10) Hedging vs Retries

Hedging(鏡像查詢)對於尾部潛伏期的高臨界讀數很有用。
限制:不多於X%的查詢,延遲的「開始格雷斯」(例如p95潛伏期),取消失敗者。
不要在沒有強冪等性的情況下將刺痛應用於寫入操作。

11)遙測和可觀察性

Теги: `tenant_id`, `endpoint`, `attempt`, `decision` (retry/skip), `reason`, `backoff_ms`, `deadline_ms`, `idempotency_key`.

度量標準:中繼比例,中繼後成功,p95/p99「端到端」,超過截止日期的數量,CB觸發。
審計記錄:「嘈雜」鍵的頂部N/尾部,與429/503相關。

12)測試和混亂

輪廓為:「pila」(暴風雨),「storm」(大量taymauts),「粘性」錯誤(每個N-),潛伏尾巴。
限量/緩存/隊列堆棧故障,clock-skew。
檢查總持續時間(attempts+backoff)是否適合於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。
  • 具有抖動的反向算法;參數由負載測試驗證。
  • 相同性:記錄/日誌/補償。
  • Retray政策在閱讀和記錄方面有所不同;respect `Retry-After`.
  • 中繼器的競爭性和嘗試總數是有限的。
  • 與circuit breaker和rate limits的集成已配置。
  • 遙測:標簽,度量,原因邏輯;dashbords p95/p99,回程後的成功率。
  • 測試「風暴」和潛伏尾巴,任務的DLQ。
  • 客戶文檔:代碼/標題,後退和取消示例。

16)典型錯誤

沒有時間線/截止線的重播是「永恒的期望」。
沒有噴射器的固定暫停是同步波和DDoS自處理。
不安全的錄音的復制品沒有同步-雙重和同步。
忽視「Retry-After」和CB信號是事件的升級。
由於缺少caps和管理控制,隊列中的瓶頸。
缺乏原因遙測/撤退解決方案是「盲目飛行」。

17)快速食譜

公開閱讀API:3次嘗試,'initial=100 ms','max=1s',full jitter,高達5%的流量。
關鍵記錄(付款):1-2次嘗試max,嚴格的計時器,強制性的「Idempotency-Key」,沒有抱怨。
外部集成:尊重「429/Retry-After」,「max_attempts=3」,「max_backoff=2-5s」,出站流限制。
背景任務:delay-backoff (5 s → 30 s → 2m), DLQ,等效處理程序。

結論

良好的重播策略是快速恢復和受控故障之間的平衡。截止線,等效性,帶有抖動的指數反射,限制競爭和對基礎設施信號的尊重將從「風暴」轉變為提高SLO可靠性和保留性的工具。

Contact

與我們聯繫

如有任何問題或支援需求,歡迎隨時聯絡我們。我們隨時樂意提供協助!

Telegram
@Gamble_GC
開始整合

Email 為 必填。Telegram 或 WhatsApp 為 選填

您的姓名 選填
Email 選填
主旨 選填
訊息內容 選填
Telegram 選填
@
若您填寫 Telegram,我們將在 Email 之外,同步於 Telegram 回覆您。
WhatsApp 選填
格式:國碼 + 電話號碼(例如:+886XXXXXXXXX)。

按下此按鈕即表示您同意我們處理您的資料。