Backend

Cache Stempede 알아보기

양글렛 2023. 10. 28. 00:48
728x90

Cache Stempede ?

캐시 만료 시점에 많은 요청이 동시에 올 경우 DB 에 부하를 주는 현상을 말한다.

당연하지만 Hot Key 에서 주로 발생한다.

 

ex) Redis Cache 사용중에 TTL 로 인해 만료된 데이터에 1000건의 요청이 동시에 온다면 RDB 에 1000건의 READ 가 발생하고

그 이후 Redis 에 1000건의 WRITE 가 발생하게 된다.

 

간단하게 여러 해결 방법 소개

1. 한 개의 요청만 처리할 수 있도록 한다.

  -> 디바운스, Lock 등으로 DB 요청이 한 번만 갈 수 있도록 해준다.

  * 단점 : 처리되는 한 개의 요청 외의 요청들의 레이턴시가 증가하면서 일시적인 병목이 생길 수 있다.

 

2. 키를 더 상세하게 나누기

  -> 키 전략을 더 상세하게 가져가면서 부하를 줄이는 방법 = Hot Key 가 아니게 만든다(?)

  * 단점 : 캐시 히트율을 낮추게 된다.

 

3. Cron Job 활용

  -> Cron Job 을 만들어 만료되기 전에 갱신해준다.

  * 단점 : 별도의 리소스가 필요하다. (서버, 작업 등)

 

4. Probabilistic Early Expriation(PER) 알고리즘을 활용

  -> 확률적 알고리즘을 이용하여 만료되기 전에 갱신해준다.

  * 단점 : 적절한 확률을 설정하지 못할 경우 이슈가 생길 수 있다.

 

5. 지터를 활용 ,, ? ,,

728x90