본문 바로가기
Backend

Cache 사용시 Thundering herd 문제 해결하기

by GOMJ 2024. 7. 29.

Thundering herd 문제란 다음과 같이 정의된 문제를 말한다.

 

" 많은 수의 프로세스 또는 스레드가 해당 이벤트가 발생할 때 깨어나지만 하나의 프로세스만 이벤트를 처리할 수 있을 때 발생하는 문제."

 

이런 경우가 Cache를 사용할 때 언제 생길 수 있을까?

 

바로 캐시가 만료되었을때 우연히 많은 수의 요청이 한번에 온다면 Thundering herd 문제가 발생할 수 있다. 최악의 경우에 서버가 다운되는 일이 생길 수 있다.

 

아래와 같은 이미지를 예시로 이해하면 된다.

 

 

캐시가 비었을때 한번에 모든 요청이 왔고, 서버는 동시에 N개의 요청을 처리하게 된다.

 

이러한 문제를 해결하려면 2가지 전략을 취할 수 있다.

 

첫번째로 조회를 할때 캐시가 비었는지 확인하고, 비었다면 lock을 통해 조회후 캐시에 등록해주면 된다. 그럼 나머지 대기중인 요청들은 DB에서 조회를 하지 않고 캐시에서 조회를 하게된다.

 

 

두번째 방법은 TTL이 만료되기전 재등록 해주는것이다. 이렇게 하면 캐시가 만료될 경우도 없으니 해당 문제를 원천 해결이 가능하다.

 

코드는 집에서 작성하겠다...

 

 

'Backend' 카테고리의 다른 글

R2DBC란?  (0) 2024.08.05
세션과 쿠키  (0) 2024.08.04
[Spring]Null 체크 방법 (@NotNull, @NotEmpty, @NotBlank, @Null)  (0) 2024.07.28
equals 사용 시 NullPointerException 방지 방법  (0) 2024.07.28
Challenge Response Protocol  (0) 2024.07.25