2025-04-16-TIL
Today I Learned
캐시 스탬피드
캐시 스탬피드는 종종 소규모 시스템에서는 문제가 되지 않는다. 하지만 백만 단위의 요청을 서빙하는 애플리케이션을 운영하는 개발자에게는 골치아픈 문제이다. 대부분의 애플리케이션이 이러한 문제를 무시하는 경향이 있고, 이는 전체 시스템의 몇 초 간의 다운을 일으킨다.
Today I Interview
Q. 캐시 스탬피드 현상에 대하여 설명해주세요.
대규모 트래픽 환경에서 캐시를 운용하는데, Cache Aside(캐시 미스 발생 시 적재) 전략을 사용한다고 가정하겠습니다. 이때, 수많은 요청들이 동시에 캐시 미스를 확인하고 원본 저장소에서 데이터를 가져와 캐시에 적재하는 상황이 발생할 수 있는데요. 이를 캐시 스탬피드 현상 혹은 Thundering Herd 문제라고 표현합니다. 캐시 스탬피드 현상은 원본 데이터베이스와 캐시의 성능을 저하할 수도 있습니다.
Q. 이 문제는 어떻게 풀어볼 수 있을까요?
해당 방식은 크게 잠금, 외부 재계산, 확률적 조기 재계산 방식으로 풀어볼 수 있습니다.
잠금(Locking) 방식 은 한 요청 처리 스레드가 해당 캐시 키에 대한 잠금을 획득합니다. 이로인해 다른 요청 처리 스레드들은 잠시 대기합니다. 잠금을 획득한 스레드는 사용자 요청에 응답하는 과정동안 캐시 적재 작업은 비동기 스레드로 처리할 수 있습니다. 잠금을 사용하기 때문에 성능 저하 가능성이 존재하며, 잠금 획득 스레드의 실패, 잠금의 생명 주기, 데드락 등 다양한 상황을 고려해야한다는 단점이 존재합니다.
외부 재계산(External Recomputation) 방식 은 모든 요청 처리 스레드가 캐시 적재를 수행하지 않습니다. 대신, 캐시를 주기적으로 모니터링하는 스레드를 별도로 관리하여 캐시의 만료시간이 얼마 남지 않은 경우, 데이터를 갱신하여 문제를 예방합니다. 해당 방식은 다시 사용되지 않을 데이터를 포함하여 갱신하기 때문에 메모리에 대한 불필요한 연산이 발생하고, 메모리 공간을 비효율적으로 사용할 가능성이 존재합니다.
확률적 조기 재계산(Probablistic Early Recomputation) 방식 은 캐시 만료 시간이 얼마 남지 않았을 경우, 확률이라는 개념을 사용하여 여러 요청 처리 스레드 중에서 적은 수만이 캐시를 적재하는 작업을 수행하여 스탬피드 현상을 완화할 수 있습니다.
추가 학습 자료
- 라인 기술 블로그 - req-shield로 캐시의 골칫거리 ‘Thundering Herd 문제’ 쉽게 풀기!
- 화해 기술 블로그 - 캐시 스탬피드를 대응하는 성능 향상 전략, PER 알고리즘 구현
- 대용량 트래픽 아니면 안 보셔도 됩니다! 선물하기 서비스 캐싱 전략 / if(kakaoAI)2024
- What is Cache Stampede ?
출처: Copyright © 2025, 매일메일. All rights reserved.
Today I Read
- 책 제목 / 저자: 제품의 탄생 / 오이카와 다쿠야, 소네하라 하루키, 고시로 구미코
- 읽은 기간: 2025. 4. 16
- 한 줄 요약:
- 인상 깊은 문장:
- 배운 점 / 느낀 점: 1장까지는 쉽게 이해가 되는 내용이지만, 그 이후에는 전문용어나 기법이 등장하면서 엔지니어 입장에서 바로 읽기에는 한 눈에 들어오는 내용은 아닌것 같다. 하지만 모두 어디에선가 한 번쯤 들어본 용어들을 실용성있는 사례를 들어 잘 설명하고 있다.
- 별점 (1~5): ⭐️⭐️⭐️⭐️
- 다시 읽고 싶은가? (O/X): O -> 용어집이나 사전처럼 두고두고 꺼내어서 읽고싶다.