PaaS/Data

Cache Store(Redis) 읽기/쓰기 전략

armyost 2023. 11. 5. 22:11
728x90

1. Cache 읽기 전략 (Read Cache Strategy)

cache hit : Cache Store (redis)에 데이터가 있을 경우 바로 가져옴 (빠름)
cache miss : Cache Store (redis)에 데이터가 없을 경우 주기억장치(DB)에서 가져옴 (느림)

1) Look Aside 패턴(=Cache Aside 패턴)
데이터를 찾을때 우선 Cache에 저장된 데이터가 있는지 우선적으로 확인 후 Cache Miss 일 경우 DB(주기억장치)에서 조회

- 특징 : 
Look Aside 패턴은 애플리케이션에서 캐싱을 이용할때 일반적으로 사용되는 기본적인 Cache 전략이다. (Spring Cache도 본 로직 수행). 이 방식은 Cache에 장애가 발생하더라도 DB(주기억장치)에 요청을 전달함으로써 Cache 장애로 인한 서비스 문제는 대비할수 있지만, Cache Store의 TTL 만큼의 정합성 문제가 발생할 수 있다. 그리고 초기 조회 시에는 Data Store를 호출 해야 하므로 단건 호출 빈도가 높은 서비스에 적합하지 않다. 반복적으로 동일한 조건의 트랜젝션을 호출하는 경우 적합한 아키텍처 이다. 


※  Cache Miss 시 : 
1) DB(주기억장치) → Application 데이터 이동으로 서비스 우선 제공
2) Application → Cache Store 데이터 이동으로 추후 조회를 대비하여 적재

※ 이때 미리 DB(주기억장치)에서 Cache로 데이터를 미리 넣어주는 작업을 하기도 하는데 이를 Cache Warming이라고 한다.
이 작업을 수행하지 않으면 서비스 초기에 트래픽 급증시 대량의 cache miss 가 발생하여 데이터베이스 부하가 급증 할 수 있다. (Thundering Herd)


2) Read Through 패턴 (=Cache Through패턴)
Cache에서만 데이터를 읽어오는 전략. Cache-Aside에서는 데이터 처리에 대한 책임이 애플리케이션에 있었다면 Cache-Through는 Cache Store에게 위임한다.

- 특징
이 아키텍처는 애초에 Redis의 데이터에 대한 절대적인 신뢰를 기반하므로 Redis의 데이터 정합성 유지능력이 어플리케이션 데이터 정합성에 절대적으로 영향을 끼친다. Redis가 다운될 경우 서비스 이용에 차질이 생길수 있다. 하지만 어플리케이션이 필요한 모든 데이터가 Cache에 있다는 전제하므로 Cache Hit확률이 높아 전반적 성능이 우수하다. 쿼리를 예측하기 어려운 읽기가 매우 많은 경우에 적합하다. 

※ PG2Redis Converter를 이용한 Redis의 복제본 생성

 

2. Cache 쓰기 전략 (Write Cache Strategy)

1) Write-Through 패턴
데이터를 DB(주기억장치)에 쓸때 동시에 Cahce Store에 데이터를 추가하거나 업데이트 한다. 

- 특징
Cache Store에 항상 업데이트하므로 Cache Store 데이터는 항상 최신 상태로 유지할 수 있다. Write-Back은 당장에 Cache Store에만 쓰는 반면 Write-Through는 DB(주기억장치)에 직접 쓰므로 상대적으로 쓰기 성능이 떨어진다.
앞으로 쓰지 않을 데이터도 Cache에 저장되기 때문에 리소스가 낭비 발생의 가능성이 높다. Write-Through 와 Read-Through 전략을 함께 사용하면 Read-Through Cache의 모든 이점을 얻을 수 있으며 데이터 일관성 보장도 얻을 수 있다.


2) Write-Back 패턴 (= Write-Behind ) 
애플리케이션은 즉시 확인하는 Cache Store에 먼저 데이터를 쓰고 약간의 지연(비동기적) 후에 데이터를 다시 DB(주기억장치)에 쓴다.

- 특징
동일 객체에 대한 Insert/Update 가 많은 워크로드에 적합한 아키텍처이다. 예를들어 네이버 기사의 좋아요 같은 경우가 이에 해당한다. DB(주기억장치)에 대한 전체 Insert/Update를 줄일 수 있어, 해당 비용을 감소할 수 있습니다. 다만 DB(주기억장치)에 쓰기 전 Cache Store에서 오류가 발생하면 데이터를 영구 소실된다.