본문으로 바로가기

지수 백오프와 지터

쓰러진 서버에 대한 재시도를 고정 간격·지수 백오프·지수+지터로 실행해, 히스토그램으로 동시 타격이 사라지고 서버가 회복하는 것을 비교한다.

1 / 12과부하로 쓰러진 서버에 클라이언트 3명이 재시도합니다. 서버가 일어나려면 조용한 틱(동시 요청 1 이하)이 3번 연속 필요합니다. 재시도 전략이 회복을 좌우합니다.
고정 간격지수 백오프지수 + 지터
서버: 과부하로 다운

막대 = 그 틱의 동시 재시도 수 (빨강 = 2발 이상, 동시 타격) · 지평 16

단계 목록 · 키보드 ←/→ 이동, Space 재생

지수 백오프는 재시도 '간격'을 벌려 서버에 숨 쉴 틈을 주고, 지터는 재시도 '시각'을 흩어 동시 타격을 없앤다 — 둘은 다른 문제를 풀며, 함께 써야 완성된다.

왜 헷갈리는가

"백오프면 됐지 지터가 왜 필요해?"가 급소다. 모든 클라이언트가 같은 지수 공식(1·2·4·8초)을 쓰면 재시도 시각도 같다 — 간격은 벌었는데 매번 다 같이 때린다. 애니메이션의 두 번째 장면이 정확히 그 함정이다.

애니메이션이 보여주는 것

고정 간격: 2틱마다 동시 3발 — 서버가 일어날 조용한 구간이 아예 없다. 재시도가 장애를 연장하는 재시도 폭풍(thundering herd)이다.

지수 백오프: 1·3·7·15틱 — 틈은 길어지지만 봉우리 높이는 그대로 3이다(전원이 같은 공식). 지터를 섞으면 봉우리가 1로 깎이고 서버가 가장 빨리 일어난다. AWS 아키텍처 블로그의 결론('full jitter를 써라')이 이 그림이다.

재시도 설계의 전체 세트

백오프+지터는 세트의 일부다. 나머지가 빠지면 여전히 위험하다.

  • 재시도 상한과 총 타임아웃: 무한 재시도는 장애를 영구화한다. '3회, 총 30초' 같은 한도를 정한다.
  • 멱등성 확인: 재시도해도 안전한 요청인가? 결제 POST를 무심코 재시도하면 이중 결제다 — 멱등 키가 선행 조건.
  • 재시도할 오류 고르기: 429·503·타임아웃은 재시도, 400·401·404는 재시도 무의미(같은 답만 반복).
  • 서킷 브레이커와의 관계: 백오프는 클라이언트 한 명의 예의, 브레이커는 '아예 그만 보내기'라는 집단 차단 — 층이 다르며 함께 쓴다.
  • 재시도 증폭 주의: A→B→C 사슬에서 층마다 3회씩 재시도하면 C는 9배 트래픽을 맞는다 — 재시도는 가장 바깥 층 한 곳에서.

기억할 것

  • 백오프는 간격을, 지터는 뭉침을 푼다 — 지터 없는 백오프는 반쪽이다.
  • 재시도 상한·타임아웃·멱등 키·오류 선별까지가 한 세트.
  • 사슬 재시도는 곱으로 증폭된다 — 바깥 층 한 곳에서만.
  • 히스토그램의 봉우리 높이가 곧 서버가 맞는 몽둥이 크기다.
지수 백오프와 지터 | KIE