낙관적 락을 사용하여 티켓팅 시스템을 구현하는 과정에서
적용한 성능개선 방안 중 하나인 랜덤 백오프 입니다.
낙관적 락에 대한 정보 및 배경은 링크에서 찾아보실 수 있습니다.
낙관적 락을 효과적으로 사용하기 위해서는 애플리케이션에서 개발자가 직접 예외가 발생하는것을 잡아주고,
재시도를 수행해야 합니다.
이번 아티클에서는 재시도 방식에 무작위성을 추가하여 얻어지는 성능 개선을 확인해보겠습니다.
기존 구현방식에서는 동시성 문제가 발생할 경우 실패한 모든 클라이언트들은 즉시 재시도합니다.
이 방식으로 구현할 경우, 모든 클라이언트는 동일한 간격으로 재시도하기 때문에 부하가 특정 시점에 집중됩니다.
방지하기 위해서는 클라이언트가 실패했을 때 매번 동일한 간격으로 재시도하는것이 아닌, 불규칙적인 간격을 두고 재시도해야 합니다.
이 “불규칙적인 간격”을 Jitter라고 합니다.
(재시도 방식에는 Jitter를 제외하고도 Exponential Backoff, Exponential Jitter Backoff 등 다양한 방법이 있지만, 여기서는 Linear Jitter를 위주로 설명하겠습니다)
기존 코드에서 어떻게 재시도 간격에 불규칙성을 추가할 수 있는지 알아보도록 하겠습니다.