지수 백오프(Exponential Backoff)

2024. 3. 5. 21:46기술공부

개념

재시도는 '이기적'이다. 재시도를 시도하면 서버 시간을 더 많이 소비하기 때문이다. 재시도 요청 수 가 적을 때에는 문제가 되지 않지만

장애가 발생한 경우에는 재시도가 부하를 줄 수 있다. 이를 방지하기 위해 많이 사용하는 방식이 '지수 백오프'이다. 이 방식은 요청이 실패할

경우 문제를 해결하고, 과도한 리소스 사용을 방지하는데 유용하다.

 

방식

즉각적으로 재시도하는 대신 재시도 간에 일정한 수준의 대기시간을 부여한다. 이 시간을 부여하는 방식에서 일반적인 패턴이

'지수 백오프'로 매 시도 후에 대기 시간이 기하급수적으로 증가한다. 이는 매우 긴 백오프 시간으로 이어질 수 있기 때문에

최대값을 설정하여 이를 방지한다.

 

지터(Jitter)

'지수 백오프' 를 사용하면 재시도 하는 요청이 분산되어 시스템의 부하를 줄일 수 있다.

 

하지만 많은 재시도가 동시에 일어난다면 어떻게 될까?

동시에 재시도를 한 요청들중에서 경합에 실패한 요청들이 '지수 백오프'에 의하여 다음 라운드에서 다시 경합한다.

하지만 동시에 들어온 재시도들은 다음 상황에서도 동시의 시간에서 경합하기 때문에 재시도 요청을 어느정도 분산시켰지만

특정 시간대에 재시도들이 몰리게 된다.

이 표를 보면 각 시간대에서 호출의 빈도가 줄어드는 것을 볼 수 있다. 이는 '지수 백오프'가 작동하고 있다는 것이 분명하다.

이 요청들을 더욱 더 분산시킬 수 있는 방법이 '지터'를 추가하는 방법이다. 

'지터'는 증가하는 시간에 무작위성을 추가하는 방법이다. 이는 재시도 요청을 효과적으로 분산시킬 수 있다.

위 그래프는 '지터'를 적용한 그래프이다. 재시도 요청이 일정하게 분산되고 있는 것을 볼 수 있다. 요청들 간에 경합이 줄어들어 시스템에 부하를 줄일 수 있다.

 

결론

'지수 백오프'는 재시도 요청을 분산시킬 효율적인 방식이지만 약간의 도움만 될 뿐이다. '지터'를 사용하여 무작위성을 추가해준다면 더욱 효과적이게 재시도 요청을 분산시킬 수 있을 것이다.

 

 

참고 :

https://aws.amazon.com/ko/blogs/architecture/exponential-backoff-and-jitter/

https://aws.amazon.com/ko/builders-library/timeouts-retries-and-backoff-with-jitter/

'기술공부' 카테고리의 다른 글

Firebase Auth  (0) 2024.04.07
객체지향 프로그래밍(SOILD)  (0) 2024.03.13
@NoArgsConstructor(access=Level.PROTECTED)  (0) 2023.11.26
AOP(Aspect Oriented Programming)/Spring  (1) 2023.11.20
WEB 서버와 WAS의 차이  (0) 2023.11.13