Preview Bản nháp chờ review — title, nội dung, link có thể sửa trước khi bỏ nhãn.

p50 ổn, p99 xấu vì vài replica/node chậm. User không care “median” — họ dính tail.

Hedging (speculative retry): gửi request 1; nếu sau threshold X ms chưa về, gửi request 2 (thường replica khác); lấy response đầu; cancel nhánh thua. Mua latency bằng thêm load.

Hedge ≠ retry

Retry   — sau khi đã fail (5xx, timeout hard)
Hedge   — trước fail, vì chậm (vẫn có thể thành công muộn)

Cả hai: amplification (xem retry-what-when)
Hedge nguy hiểm hơn nếu side-effect: hai request có thể cùng commit

Timeline ý

t=0    gửi A ──────────────────────────►
t=X    vẫn chưa về → gửi B ──────► B về trước
       cancel A
t<X    A về → không gửi B (hedge tiết kiệm)

Chọn X quanh p95–p99 dependency: quá thấp → hedge gần như mọi request (gần ×2 QPS); quá cao → ít khi kích hoạt, p99 không giảm.

Điều kiện bắt buộc

  • Idempotent / an toàn dual — GET, cache fill; không hedge “charge thẻ” trừ khi có cùng key.
  • Cancel nhánh thua — không cancel = 2× inventory + 2× work (đôi khi 2× effect).
  • Còn budgettimeout budget; đừng hedge khi còn 50ms.
  • Dependency khỏe — breaker đỏ / quá tải thì hedge = dầu vào lửa ( breaker, shed).

Chi phí

  • QPS dependency tăng (partial hedge rate × 2).
  • In-flight tạm thời ×2 trên path đó.
  • Phức tạp client: race, cancel, metric hedge_hit.

Đo: p99 trước/sau, hedge_fire_rate, dependency CPU. Không hedge “vì hay”.

Khi không hedge

  • Write money / SMS / non-idempotent.
  • Single replica / không có “chậm lệch” — hedge chỉ nhân load.
  • Đã gần saturation — cần scale/shed, không speculative.

Một câu

Hedge mua tail latency bằng capacity — chỉ khi effect an toàn, nhánh thua bị hủy, và dependency còn headroom.