참고
Cache과 Caching Strategy
NOTE
캐시란, 나중에 요청될 결과를 미리 저장해두었다가 빠르게 서비스를 해주는 것을 의미한다!
•
캐시는 RAM을 사용하기 때문에 데이터베이스보다 훨씬 빠르게 데이터를 응답해줄 수 있다.
•
하지만 RAM은 용량이 크지않기 떄문에, 데이터를 모두 저장할수 없으므로 ‘지침 전략’을 숙지할 필요가 있다.
◦
어느 종류의 데이터를 캐시에 저장하는가?
◦
얼마만큼의 데이터를 캐시에 저장하는가?
◦
얼마동안 캐시를 저장하는가?
캐시 요청
•
cache hit : 캐시 스토어(redis)에 데이터가 있을 경우 바로 가져옴(빠름)
•
cache miss : 캐시 스토어(redis)에 없는 경우 어쩔수 없이 DB에서 가져옴(느림)
캐시 목적
•
서버간 불필요한 트래픽을 줄일 수 있다.
•
그로 인해 웹어플리케이션 서버의 부하 감소시킨다.
•
어플리케이션의 빠른 처리성능(조회)을 확보해서 궁극적으로 어플리케이션를 사용하는 고객에게 쾌적한 서비스경험을 제공하는 것이다.
Cache의 대상이 되는 정보들
1.
단순한, 또는 단순한 구조의 정보를 -> 정보의 단순성
2.
반복적으로 동일하게 제공해야 하거나 -> 빈번한 동일요청의 반복
3.
정보의 변경주기가 빈번하지 않고, 단위처리 시간이 오래걸리는 정보이고 -> 높은 단위처리비용
4.
정보의 최신화가 반드시 실시간으로 이뤄지지 않아도 서비스 품질에 영향을 거의 주지 않는 정보
캐시 목적
NOTE
•
서버간 불필요한 트래픽을 줄일 수 있다.
•
그로 인해 웹어플리케이션 서버의 부하 감소시킨다.
•
어플리케이션의 빠른 처리성능(조회)을 확보해서 궁극적으로 어플리케이션를 사용하는 고객에게 쾌적한 서비스경험을 제공하는 것이다.
Cache의 대상이 되는 정보들
NOTE
1.
단순한, 또는 단순한 구조의 정보를 -> 정보의 단순성
2.
반복적으로 동일하게 제공해야 하거나 -> 빈번한 동일요청의 반복
3.
정보의 변경주기가 빈번하지 않고, 단위처리 시간이 오래걸리는 정보 -> 높은 단위처리비용
4.
정보의 최신화가 반드시 실시간으로 이뤄지지 않아도 서비스 품질에 영향을 거의 주지 않는 정보
어떤 정보들을 Cache로 사용하나?
NOTE
•
포탈의 검색어
•
쇼핑몰의 핫딜상품, 베스트셀러, 추천상품등
•
상품의 카테고리와 카테고리별 등록상품 수
•
방문자수, 조회수, 추천수
•
1회성 인증정보 (SMS 본인인증정보, IP정보등)
•
공지사항, Q&A
캐싱 전략
NOTE
캐시를 사용하게되면, 데이터베이스와 정보가 불일치 하는 현상이 발생하는데 이를 방지하기 위한 전략이 캐싱 전략이다!
•
이러한 문제를 데이터 정합성이라 한다.
◦
ex) 캐시에는 10개로 저장되어 있는데, 데이터베이스에는 7개로 저장되어 있는 경우
•
DB간의 데이터 불일치, 성능을 잃지않기 위한 전략은 크게 2가지로 나뉜다.
◦
캐시 읽기 전략(Read Cache Strategy)
◦
캐시 쓰기 전략(Write Cache Strategy)
캐시 읽기 전략 - Look Aside 패턴
NOTE
데이터를 찾을 때 우선 캐시에 저장된 데이터를 우선적으로 확인하고, 없으면 DB조회
장점
•
반복적인 읽기가 많은 호출에 적합하다
•
캐시와 DB가 분리되어 가용되기 때문에 원하는 데이터만 별도로 구성하여 캐시에 저장
•
캐시와 DB가 분리되어 가용되므로, redis가 다운 되더라도 DB에서 데이터 가져올 수 있다.
단점
•
캐시에 connection이 많았다면, redis가 다운되면 DB로 몰려서 부하가 생긴다.
캐시 읽기 전략 - Read Through 패턴
NOTE
캐시에서만 데이터를 읽어오는 전략 (inline cache)
•
Look Aside와 비슷하지만 데이터 동기화 라이브러리 또는 캐시 제공자에게 위임하는 방식이라는 차이가 있다.
장점
•
캐시와 DB간의 데이터 동기화가 항상 이루어져 데이터 정합성 문제에서 벗어남.
•
읽기가 많은 워크로드에 적합
단점
•
데이터를 조회하는데 있어 속도가 느리다.
•
데이터 조회를 전적으로 캐시에만 의존하므로, redis가 다운되면 서비스 이용에 차질이 생김.
◦
구성요소를 Replication 또는 Cluster로 구성하여 가용성을 높여야 한다.
캐시 쓰기 전략 - Write Back 패턴
NOTE
데이터를 저장할때 DB가 아닌 먼저 캐시에 저장하여 모아놓았다가, 특정 시점마다 DB로 쓰는 방식으로 캐시가 일종의 Queue 역할을 겸하게된다.
장점
•
캐시와 DB 동기화를 비동기하기 때문에 동기화 과정이 생략
•
캐시에 모아놨다가 DB에 쓰기 떄문에 쓰기 쿼리 회수 비용과 부하를 줄일 수 있다.
•
Write가 빈번하면서 Read를 하는데 많은 양의 Resource가 소모되는 서비스에 적합.
•
데이터 적합성 확보
단점
•
자주 사용되지 않는 불필요한 리소스 저장
•
캐시에 오류가 발생하면 데이터 영구 소실.
캐시 쓰기 전략 - Write Throug 패턴
NOTE
데이터베이스와 캐시에 동시에 데이터를 저장하는 전략
장점
•
DB와 캐시가 항상 동기화 되어있어, 캐시의 데이터는 항상 최신상태 유지
•
데이터 유실이 발생하면 안 되는 상황에 적합.
단점
•
자주 사용되지 않는 불필요한 리소스 저장.
•
매 요청마다 두번의 Write가 발생하게 됨으로써 빈번한 생성, 수정이 발생하는 서비스에는 성능 이슈가 발생한다.
캐시 쓰기 전략 - Write Around 패턴
NOTE
cache miss가 발생하는 경우에만, DB와 캐시에 데이터를 저장한다.
장점
•
Write Through보다 훨씬 빠름
•
모든 데이터는 DB에 저장 (캐시를 갱신하지 않음)
단점
•
캐시와 DB 내의 데이터가 다를 수 있다.
캐시 읽기 + 쓰기 전략조합
Look Aside + Write Around 조합
NOTE
파랑 - 읽기, 빨강 - 쓰기
•
가장 일반적으로 자주 쓰이는 조합.
Read Through + Write Around 조합
NOTE
파랑 - 읽기, 빨강 - 쓰기
•
항상 DB에 쓰고, 캐시에서 읽을 때 DB에서 먼저 읽어오므로, 정합성 이슈에 대한 완벽한 안전장치를 구성할 수 있다.
Read Through + Write Through 조합
NOTE
파랑 - 읽기, 빨강 - 쓰기
•
데이터를 쓸 때, 항상 캐시에 먼저 쓰므로 읽어올 때 최신 캐시 데이터 보장
•
데이터를 쓸 때, 항상 캐시에서 DB로 보내므로 데이터 정합성 보장