웹 서비스 환경에서 시스템 성능 향상을 위해 사용하는 기술. 캐시(Cache)는 메모리(RAM)를 사용함으로써 데이터베이스보다 훨씬 빠르게 데이터를 응답할 수 있어 이용자에게 빠르게 서비스를 제공할 수 있다.
메모리를 사용하기에 데이터를 모두 캐시에 저장한다면 용량 부족 현상이 일어나 시스템에 영향을 주게 된다.
* 일반적으로 메모리의 용량은 16-32G 이므로
#용어 정리
Cache Hit : 캐시 스토어(redis)에 데이터가 있을 경우 바로 가져옴
Cache Miss : 캐시 스토어(redis)에 데이터가 없을 경우 DB에서 가져옴
캐시 이용시 주의 해야할 문제로 데이터 정합성 문제와 성능 문제가 있다.
데이터 정합성이란 어느 한 데이터가 캐시와 데이터베이스 두 곳에서 같은 데이터임에도 불구하고 데이터 정보값이 서로 다른 현상을 말한다.
성능 문제로는 캐시 데이터의 수명 관련 문제이다. 모든 데이터를 지워지지 않고 평생 캐시 저장소에 저장하고 있는 것은 성능 문제를 야기한다.
그렇기 때문에 캐시 만료 정책을 적절하게 설정하고 오랜 시간이 지난 데이터는 캐시 저장소에서 제거될 수 있도록 해야 한다.
캐싱 전략을 세울 때는 적절한 캐시 읽기 전략(Read Cache Strategy)과 캐시 쓰기 전략(Write Cache Strategy)을 통해, 캐시와 데이터베이스 간 정합성 문제와 성능적인 문제를 고려하며 전략을 세워야 한다.
데이터 조회시 우선적으로 캐시에 저장된 데이터가 있는지 확인하는 전략. 만약, 캐시에 데이터가 없을 경우 데이터베이스를 조회한다.
특징 :
Cache Warming
Cache Warming
미리 캐시(Cache)로 데이터베이스의 데이터를 넣어두는 작업을 의미한다.
이 작업을 수항하지 않을 경우 서비스 초기에 트래픽이 급증할 경우, Cache Miss가 발생하여 데이터베이스 부하가 급증할 수 있다.(Thundering Herd)
캐시 자체는 용량이 작아 무한정으로 데이터를 가지고 있을 수 없으므로 일정 시간이 지나면 Expire된다. 그러면 다시 Thundering Herd가 발생할 수 있기 때문에 캐시의 TTL을 조정해야 한다.
* TTL (Time To Live) : 데이터 유효 기간
Look Aside(Cache Aside)와 비슷하지만 데이터 동기화를 라이브러리 또는 캐시 제공자에게 위임하는 방식이라는 차이가 있다.
Read Through Pattern은 캐시와 데이터베이스가 일렬로 배치되며, Cache Miss가 발생하면 데이터베이스에서 누락된 데이터를 로드하고 캐시를 업데이트하고 이를 애플리케이션에 반환한다.
Cache Aside Pattern과의 차이점은 애플리케이션이 캐시를 채우는 역할을 하는지 여부에 따라 있다.
특징 :
캐시(Cache)와 데이터베이스 동기화를 비동기로 하는 방법이며 동기화 과정이 생략되기 때문에 쓰기 작업이 많은 경우에 적합하다. 캐시에서 일정 시간 또는 일정량의 데이터를 모아놓았다가 한번에 데이터베이스에 업데이트 하기 때문에 쓰기 비용을 절약할 수 있다.
캐시(Cache)에서 데이터베이스로 데이터를 업데이트 하기 전에 장애가 발생하면 데이터가 유실될 수 있다.
특징 :
# 캐시에 Replication이나 Cluster 구조를 적용함으로써 Cache 서비스의 가용성을 높이는 것이 좋으며, 캐시 읽기 전략인 Read-Through 와 결합하면 가장 최근에 업데이트 된 데이터를 항상 캐시에서 사용할 수 있는 혼합 워크로드에 적합하다.
데이터를 데이터베이스에 저장할 때마다 캐시에 데이터를 추가하거나 업데이트 한다. 이로 인해 캐시의 데이터는 항상 최신 상태로 유지할 수 있지만, 쓰지 않는 데이터도 저장되기 때문에 리소스(Resource)가 낭비된다.
특징 :
# Write Through Pattern 과 Write Back Pattern 둘 다 모두 자주 사용되지 않는 데이터가 저장되어 리소스 낭비가 발생되는 문제점을 안고 있기 때문에, 이를 해결하기 위해 TTL을 꼭 사용하여 사용되지 않는 데이터를 반드시 삭제해야 한다. *Expire 명령어
Write Through Pattern 과 Read Through Pattern 을 함께 사용하면, 캐시의 최신 데이터 유지와 더불어 데이터의 정합성을 얻을 수 있다.
대표적인 예로 AWS의 DynamoDB Accelerator(DAX)가 있다.
DynamoDB Accelerator(DAX) 는 읽기 / 쓰기 캐시의 좋은 예이다. DynamoDb 및 애플리케이션과 인라인으로 배치된다. DynamoDB에 대한 읽기 및 쓰기는 DAX를 통해 수행할 수 있다.
출처 : https://wnsgml972.github.io/database/2020/12/13/Caching/
데이터는 데이터베이스에 직접 기록되며, 읽은 데이터만 캐시에 저장된다.
Write Around Pattern 은 Read-Through와 결합될 수 있으며, Cache-Aside와도 결합될 수 있다. 데이터가 한 번 쓰여지고, 읽기가 적은 경우 좋은 성능을 보인다. 예를 들어, 실시간 로그 또는 채팅방 메시지가 있다.
특징 :
따라서, 데이터베이스에 저장된 데이터가 수정, 삭제될 때마다, 캐시 또한 삭제하거나 변경해야 하며, 캐시의 Expire를 짧게 조정하는 방식으로 대처해야 한다.
# Write Around Pattern 은 주로 Look Aside Pattern, Read Through Pattern 과 결합해서 사용된다.
# 데이터가 한 번 쓰여지고, 자주 읽히지 않는 상황에서 좋은 성능을 제공한다.
[Cache] 캐싱 전략2 바로가기
https://hojinjeong.tistory.com/286
참고 :
[REDIS] 📚 캐시(Cache) 설계 전략 지침 💯 총정리
Redis - 캐시(Cache) 전략 캐싱 전략은 웹 서비스 환경에서 시스템 성능 향상을 기대할 수 있는 중요한 기술이다. 일반적으로 캐시(cache)는 메모리(RAM)를 사용하기 때문에 데이터베이스 보다 훨씬 빠
inpa.tistory.com
https://wnsgml972.github.io/database/2020/12/13/Caching/
Caching 전략 소개 및 사용 예제
캐싱 전략이란? “캐싱 전략”은 최근 웹 서비스 환경에서 시스템 성능 향상을 위해 가장 중요한 기술입니다. 캐시는 메모리를 사용함으로 디스크 기반 데이터베이스 보다 훨씬 빠르게 데이터
wnsgml972.github.io
https://bcp0109.tistory.com/364
Cache 전략
Overview What is Caching ? 글을 참고하여 캐시 전략에 대해 정리했습니다. 1. Cache 란? 위키 백과에는 이렇게 나와 있습니다. 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 캐시의 접
bcp0109.tistory.com
[Redis] 캐시란? 캐싱전략? 알고 써보자!
사용자에 입장에서 데이터를 더 빠르게, 더 효율적으로 액세스를 할 수 있는 임시 데이터 저장소를 뜻한다. 대부분의 어플리케이션에서 속도 향상을 위해 캐시를 사용한다고 한다.캐시 저장소
velog.io
https://www.youtube.com/watch?v=92NizoBL4uA
[MYSQL] SELECT 결과 UPDATE 시키기 (0) | 2023.08.10 |
---|---|
[Cache] 캐싱 전략2 (0) | 2023.05.25 |
[데이터베이스] 인덱스(Index) (0) | 2023.05.14 |
[데이터베이스] 식별관계 & 비식별관계 (0) | 2023.05.11 |
[데이터베이스] MySQL 이벤트 스케줄러 (0) | 2023.05.11 |