Retry 전략

2024. 9. 25. 16:46·TIL

지수 백오프 (Exponential Backoff)

네트워크 상에서 일시적인 오류가 발생했을 때, 재시도 간격을 점진적으로 늘려가며 재시도를 수행하는 알고리즘.

주로 네트워크의 혼잡을 피하거나, 서버가 과부하 상태일 때 과도한 요청을 방지하기 위해 사용된다.

방법의 핵심은 "지수적으로" 대기시간을 늘리는 것

지수 백오프의 필요성

네트워크 통신 중 오류가 발생할 경우, 클라이언트는 보통 재시도를 통해 이를 해결하려고 한다. 하지만 모든 클라이언트가 동시에 재시도를 한다면, 서버는 한꺼번에 많은 요청을 처리해야 하므로 부하가 증가할 수 있다. 이러한 현상을 "재시도 폭주"라고 하며, 이를 방지하기 위해 지수 백오프를 사용한다.

하지만 이 방법도 한계가 있다. 어차피 동시에 요청이 몰린다면 똑같은 시간 간격으로 모든 재시도가 동일하게 몰릴 것이기 때문이다.

지연변이 (Jitter)

Jitter는 데이터 통신 용어로 사용할 때는 패킷 지연이 일정하지 않고, 수시로 변하면서 그 간격이 일정하지 않는 현상을 의미한다. Jitter 개념을 Retry에 이용하면 API를 요청하는 클라이언트 간의 동일한 재시도 시간 간격에 무작위성을 추가하여 서로 요청하는 시간대의 동시성?을 분산시킬 수 있다.

위 두 개념을 적용하면 지수로 증가하는 Backoff 시간에 일정 범위 안의 랜덤 대기 시간을 추가적으로 더하는 것으로 요청을 분산할 수 있다.

어디서 쓰나

  • AWS SDK는 지수 백오프와 지터를 사용하여 연속 충돌을 방지한다 : https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.Errors.html#Programming.Errors.RetryAndBackoff
  • Github 에서 exponentialBackoff 검색 시 109k의 코드가 검색 될 만큼 많이 사용되고, 관련 미들웨어도 있는것을 알 수 있다. https://github.com/search?q=exponentialBackoff&type=code

Reference

https://1yoouoo.tistory.com/37
https://jungseob86.tistory.com/12

 

[기타] Retry 전략에 대해서(Exponential Backoff, Jitter)

최근 각광받는 MSA 구조, 분산 시스템 구조에서 서버간 네트워크 통신은 매우 중요하다. 특히 네트워크를 통한 API 호출은 언제 어떻게 실패할지 예측하기 어렵기 때문에 이를 감시할 수 있는 모

jungseob86.tistory.com

 

 

지수 백오프(Exponential Backoff) 알아보기

저번에 웹소켓을 이용하여 React로 채팅을 구현한 경험이 있다. [바로가기] 리액트 웹소켓(Stomp) 이번 토이프로젝트로 MBTI 유형을 선택해서 채팅을 할 수 있는 서비스를 구현했다. 서버는 Java, Spring

1yoouoo.tistory.com

 

'TIL' 카테고리의 다른 글

구글 코랩에서 Stable Diffusion WebUI API 호출하기  (2) 2024.10.18
2024.09.27  (6) 2024.09.27
Vite, Webpack, Babel 관계 정리  (0) 2024.05.24
자바스크립트 비동기 처리 알아보기  (3) 2024.04.01
Windows 10 에어팟 2 케이스 충전 불가능 해결하기  (0) 2024.03.29
'TIL' 카테고리의 다른 글
  • 구글 코랩에서 Stable Diffusion WebUI API 호출하기
  • 2024.09.27
  • Vite, Webpack, Babel 관계 정리
  • 자바스크립트 비동기 처리 알아보기
HWBB
HWBB
흥미주도개발자
  • HWBB
    코딩공부방
    HWBB
  • 전체
    오늘
    어제
    • 분류 전체보기 (164)
      • 알고리즘 (61)
      • Android (27)
      • Kotlin (0)
      • Java (2)
      • Design Pattern (2)
      • React Native (1)
      • Python (0)
      • TIL (21)
      • Unity (0)
      • React (2)
      • AWS (0)
      • Git (11)
      • MFC (1)
      • Spring (4)
      • Computer Science (4)
      • Vue (4)
      • Infra (6)
      • 박현우 (10)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 승윤이
  • 공지사항

  • 인기 글

  • 태그

    github
    코틀린
    baekjoon
    코딩테스트
    Kotlin
    algorithm
    Java
    백준
    깃허브
    coding
    GIT
    알고리즘
    android studio
    AWS
    프로그래머스
    자바
    안드로이드 스튜디오
    programmers
    Android
    안드로이드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
HWBB
Retry 전략
상단으로

티스토리툴바