일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- static
- 인덱스
- 조합
- java
- MSA
- 열 속성
- cache
- AOP
- StringBuilder
- 생성자 주입
- hashcode
- equals
- lambda
- VUE
- 재정의
- Spring
- 테스트 코드
- 필드 주입
- jpa
- KEVISS
- select_type
- SQL
- stream
- redis
- 바이너리 카운팅
- DI
- Test
- jwt
- DDL
- docker
- Today
- Total
백엔드 개발자 블로그
캐시 문제 해결 가이드 - DB 과부하 방지 실전 팁 본문
대용량 트래픽 환경에서 캐시를 사용할 때 몇가지 주의해야 할 상황들을 정리해보고자 합니다.
https://toss.tech/article/cache-traffic-tip
캐시 문제 해결 가이드 - DB 과부하 방지 실전 팁
대용량 트래픽 환경에서 캐시를 사용할 때 주의해야할 위험 상황과 예방법을 소개합니다.
toss.tech
1. 캐시 쇄도 (Cache Stampede)
캐시 쇄도란 캐시 미스가 동시에 많이 발생할 경우 데이터베이스에 부담이 가중되는 현상이다.
캐시가 전부 정확히 같은 시간에 만료되도록 구현하면 자주 발생한다.
해결안 : 지터 (Jitter)
지터란 전자 신호를 읽는 과정에서 발생하는 짧은 지연 시간을 의미한다.
캐시 만료 시간을 무작위로 약간 지연시키면, 캐시 쇄도 상황에서도 데이터베이스의 부하를 균등하게 분산시킬 수 있다.
지터가 길어질수록 사용자는 더 오래된 정보를 볼 수 있으므로, 지터가 과도하게 추가되지 않도록 주의해야 한다.
2. 캐시 관통 (Cache Penetration)
캐시 관통이란 데이터베이스에서 읽었는데도 캐싱 되지 않는 상황을 말한다.
보통 데이터베이스에도 해당 값이 없어서 null을 반환받았을 때는 캐시를 채우지 않도록 구현하므로 해당 현상이 흔하다.
캐시 관통이 빈번하다면, 데이터베이스에 불필요한 조회 요청이 자주 발생한다.
해결안: 널 오브젝트 패턴 (Null Object Pattern)
1. 블룸 필터를 사용하면 확률적으로 캐시 관통을 방지한다. 하지만 블룸 필터의 정합성이 깨진다면, 블룸 필터를 복구하기 위해 모든 캐시를 읽어야 해서 운영에 어려움이 따른다.
2. 널 오브젝트 패턴을 사용해서 ‘값이 없음’을 캐싱하는 편이 조금 더 운영하기 쉽다. 객체 타입은 부재를 뜻하는 객체를 선언하여 사용하면 되지만, 원시 타입의 경우에는 이 객체를 대체할 특정 값을 지정해야 한다. 예를 들어, 양수만 존재하는 정수 타입의 데이터를 캐시할 때는 음수인 정수의 최솟값으로 '값이 없음'을 나타내기로 애플리케이션에서 약속할 수 있다.
3. 캐시 시스템 장애
캐시 시스템에 장애가 발생해서 모든 트래픽을 데이터베이스로 보내게 되면 문제가 발생한다.
해결안: 대체 작동 (Failover)
중요도가 높은 기능만 데이터베이스로 fallback한다.
부가 기능에 대해서는 사용자에게 대체 UI를 제공하거나 양해를 구하는 것이 현실적인 대응 방법이다.
4. 핫키 (hotkey) 만료
많은 요청이 집중되는 키를 '핫키'라고 부른다.
핫키가 만료되는 순간, 여러 요청이 동시에 데이터베이스를 불필요하게 반복해서 조회할 수 있다.
해결안: 분산 락 (Distributed Lock)
캐시를 애플리케이션 서버 간의 공유 자원으로 볼 수 있다. 캐시 미스가 발생했을 때 락을 설정하고 캐싱한 후에 락을 해제함으로써, 단 한 번의 쓰기 작업만 허용할 수 있다.
'테크 블로그 리뷰' 카테고리의 다른 글
인자가 많은 메서드는 왜 나쁠까? (0) | 2024.03.13 |
---|---|
Spring JDBC 성능 문제, 네트워크 분석으로 파악하기 (0) | 2024.03.13 |
대용량 트래픽 처리 전략 (0) | 2024.02.07 |
MSA로 전환2 (0) | 2024.02.07 |
헬스 체크 (0) | 2024.01.07 |