반응형
매일메일을 통한
하루 CS 공부하기
캐시 스탬피드 현상이란?
대규모 트래픽 환경에서 캐시를 운용하는데, Cache Aside (캐시 미스 발생 시 적재) 전략을 사용한다고 가정하자.
수많은 요청들이 동시에 캐시 미스를 확인하고 원본 저장소에서 데이터를 가져와 캐시에 적재는 상황이 발생할 수 있다.
이를, 캐시 스탬피드 현상 또는 Thundering Herd 문제라고 한다.
이 현상은 원본 DB와 캐시의 성능을 저하할 수도 있다.
문제 해결 방안
1. Locking 방식
한 요청 처리 스레드가 해당 캐시 키에 대한 Lock을 획득한다. 이 때 다른 요청 스레드는 잠시 대기한다.
Lock을 가진 스레드는 사용자 request에 응답하는 과정동안 캐시 적재 작업은 비동기 스레드로 처리할 수 있다.
Lock을 사용하기 때문에 성능 저하 가능성이 존재하며, Lock 획득 실패, Lock의 life cycle, DeadLock 등 다양한 상황을 고려해야 한다.
2. External Recomputation (외부 재계산)
모든 요청 스레드가 캐시 적재를 수행하지 않고, 대신 캐시를 주기적으로 모니터링하는 스레드를 별도로 관리한다.
해당 스레드에서 캐시 만료시간이 얼마 남지 않은 경우, 데이터를 갱신해서 문제를 예방함.
하지만, 다시 사용되지 않을 데이터까지 갱신하기 떄문에 메모리에 대한 불필요한 연산이 발생하고, 메모리 공간을 비효율적으로 사용할 가능성이 존재한다.
3. Probablistic Early Recomputation (확률적 조기 재계산)
캐시 만료 시간이 얼마 남지 않았을 경우, 확률이라는 개념을 사용하여
여러 요청 처리 스레드 중 적은 수만이 캐시를 적재하는 작업을 수행한다.
반응형
'Back-end' 카테고리의 다른 글
[DataBase] CAP 정리란? (0) | 2025.02.12 |
---|---|
[Back-End] Cache Aside (Lazy Loading)이란? (0) | 2025.02.03 |
[DataBase] Transaction - ACID란? (0) | 2025.02.03 |
[Back-End] 로드밸런싱 톺아보기 (0) | 2025.01.30 |
[Back-End] DB Replication이란 무엇인가. (0) | 2025.01.24 |