Cache tier
캐시 계층
성능 개선 및 데이터베이스의 부하를 줄이기 위해 웹서버와 데이터베이스 사이에 캐시서버를 둔다.
캐시는 어떤 상황에 바람직한가?
데이터 갱신은 자주 일어나지 않지만 참조는 빈번하게 일어날때 고려한다.
어떤 데이터를 캐시에 두어야 하는가?
캐시는 데이터를 휘발성 메모리에 두므로, 영구적으로 보관할 데이터를 캐시에 두는 것은 바람직하지 않다.
캐시 서버가 재시작되면 캐시 내 모든 데이터들은 날아간다.
캐시에 부관된 데이터는 어떻게 만료 되는가?
만료 정책을 마련해야한다.
만료 기한이 너무 짧으면 데이터베이스를 자주 읽게 된다.
만료 기한이 너무 길면 원본과 차이가 날 가능성이 높아진다.
일관성은 어떻게 유지되는가?
원본을 갱신하는 연산과 캐시를 갱신하는 연산이 단일 트랜잭션으로 처리되야 한다.
장애에는 어떻게 대처할 것인가?
캐시 서버를 한 대만 두는 경우 해당 서버는 단일 장애 지점(Single Point of Failure)이 되어버릴 가능성이 있다.
SPOF를 피하기 위해서는 캐시 서버를 분산시켜야 한다.
캐시 메모리는 얼마나 크게 잡을 건가?
캐시 메모리가 작을때
동기화 관리가 상대적으로 더 간단하다.
잦은 캐시미스로캐시의 성능이 떨어진다.
캐시 메모리가 클때
더 많은 데이터를 저장할 수 있기때문에 데이터베이스의 접근을 줄이고 응답시간을 단축시킨다.
사용하지않는 데이터를 캐싱할 경우 메모리 자원이 낭비된다.
동기화가 복잡해지고 오버헤드가 증가할 수 있다.
캐시 정책:
LRU (Least Recently Used)
가장 오래동안 사용되지 않은 항목을 캐시에서 제거한다.
최근에 사용된 데이터가 미래에도 사용될 가능성이 높다는 가정.
구현이 간단하다.
FIFO (First In, First Out)
캐시에 가장 먼저 들어온 데이터를 제거한다.
최근 또는 자주 사용되는 데이터가 제거될 수 있다.
Random Replacement
임의의 항목을 제거 한다.
구현이 매우 간단하다.
Adaptive Replacement Cache (ARC)
최근에 사요요된 항목과 자주 사용된 항목의 균형을 유지한다.
LRU와 LFU의 결합 상태
MRU (Most Recently Used)
가장 최근에 사용된 항목을 캐시에서 제거한다.
2Q
LRU의 변형으로 두개의 큐를 사용해서 캐시를 관리한다.
하나의 큐는 최근에 접근된 데이터를 관리하고, 다른 하나는 자주 접근되는 데이터를 관리한다.
Last updated