목록 보기
Req-Saver로 캐시의 골칫거리 'Thundering Herd 문제' 쉽게 풀기!
백엔드

Req-Saver로 캐시의 골칫거리 'Thundering Herd 문제' 쉽게 풀기!

라인
라인
2024년 5월 24일

두줄요약

캐시 미스와 만료 구간에서 발생하는 Thundering Herd 문제를 줄이기 위해 req-shield를 설계했습니다. 락과 TTL 갱신 전략으로 중복 조회를 억제하고 부하 테스트로 성능 향상을 확인했습니다.

문제 상황

  • 캐시 미스 시 동일 요청이 백엔드 스토어로 몰리며 중복 조회와 중복 캐시 적재가 발생하는 Thundering Herd 문제
  • 캐시 만료 시점에 트래픽이 겹치면 백엔드와 캐시 모두에 부하가 집중되는 구조

원인 분석

  • 캐시 적중 여부와 무관하게 동일 키 요청이 각각 백엔드로 전달되는 점
  • TTL 만료 구간에서 캐시 공백이 생기며 다수 요청이 동시에 재생성 작업에 진입하는 점

해결 방법

  • 캐시 미스 시 로컬 락 또는 주입형 글로벌 락으로 대표 요청만 백엔드 조회와 캐시 적재 수행
  • 캐시 히트 시 TTL이 일정 비율 이하로 남으면 비동기 갱신으로 만료 공백 최소화
  • Spring AOP 기반 애너테이션과 코어 모듈로 MVC, WebFlux, Coroutine 환경에 맞게 통합

성능/운영 포인트

  • Spring MVC, WebFlux, Kotlin Coroutine 환경에서 기존 방식 대비 평균 TPS 향상 확인
  • Redis, 테스트 컨테이너, NGrinder를 활용한 부하 테스트로 효과 검증
  • 대량 트래픽, 공통 데이터, 짧거나 중간 길이 TTL, 느린 백엔드 환경에서 활용 적합

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...