분산 캐시(distributed cache)

» dev

캐시 (cache)

💡파레토 법칙

어떠한 서비스의 80% 활동을 20%의 유저가 하기 떄문에 20%의 데이터만 캐시해도 서비스의 대부분의 데이터를 커버할 수 있다는 것

캐시도 자주 사용되는 일부 데이터만 보관하여도 대부분의 성능을 그 이상의 성능 향상

한번 조회된 데이터를 미리 특정 공간에 저장해놓고, 똑같은 요청이 발생하게 되면 다시 데이터를 DB에서 조회하지 않고 저장해놓은 데이터를 제공해서 빠르게 접근하도록 하는것

일반적으로 캐시는 메모리(RAM)을 사용하기 때문에 데이터베이스보다 빠른 데이터 응답을 할 수 있어 사용자에게 빠르게 서비스를 제공할 수 있다.

하지만 RAM의 용량은 크지 않기 때문에 데이터를 모두 캐시에 저장해버리면 용량 부족이 일어날 수 있고, 분산 서버 환경에서 공유하기 쉽지 않기 때문에 인 메모리 DB를 사용한다.

분산 캐시(distributed cache)

캐시는 로컬 캐시와 분산 캐시로 나누어질 수 있는데 로컬 캐시는 단일 시스템이나 단일 애플리케이션 내에 데이터를 저장하는 것을 말한다.

분산 캐시는 여러 시스템이나 노드에 데이터를 저장하는 것이다. 여러 서버에 걸쳐 확장해야 하거나 지리적으로 분산되어야 하는 애플리케이션에 필수적이다.

분산 캐시의 필요성

다중 서버 환경을 가진 경우 로컬 캐싱으로 데이터를 저장 시 데이터 불일치, 대기 시간 증가 및 병목 현상이 발생할 수 있다.

분산 캐시의 이점

  • 확장성: 애플리케이션에 대한 트래픽이 증가함에 따라 기존 운영을 중단하지 않고 분산 캐시 시스템에 추가 캐시 서버를 추가할 수 있다.
  • 내결함성: 한 캐시 서버에 장애가 발생하면 요청을 다른 서버로 다시 라우팅하여 캐시된 데이터의 지속적인 가용성을 보장할 수 있다.
  • 성능: 데이터가 사용자와 더 가까운 곳에 저장되므로 데이터를 가져오는 데 걸리는 시간이 줄어들고 응답 시간이 향상된다.

Redis

일반적인 RAM은 서버가 다운되면 캐시가 사라지지만, Redis에 저장된 데이터는 영구적으로 보존할 수 있다.

서버에서 RAM의 확장(Scale-up)이 쉽지 않기 때문에 클라우드에서 Redis를 활용하면 필요한 만큼 메모리 용량을 조절할 수 있다.

Redis는 여러 서버 간 데이터 공유가 가능하다. 데이터 분산을 지원하기 때문에 대규모 분산 시스템에서 활용에 적합하다.

Redis 캐시 패턴

📚 읽기 전략

📖 Look Aside 패턴

데이터를 캐시에서 우선으로 확인하고 데이터가 없으면 DB에서 조회한다. 반복적인 읽기가 많은 호출에 적합하며 단건 호출 빈도가 높은 서비스가 아닌, 동일 쿼리를 수행하는 서비스에 적합한 아키텍처이다.

📖 Read Through 패턴

캐시에서만 데이터를 읽어오는 전략으로, 데이터 동기화를 라이브러리 또는 캐시 제공자에게 위임하여 데이터를 조회하는데 있어 전체적으로 속도가 느리지만 캐시와 DB 간의 데이터 동기화가 항상 이루어져 데이터 정합성 문제를 해결할 수 있다. 하지만 캐시에 문제가 발생한 경우 서비스 전체 중단에 빠질 수 있어 Cluster를 구성하여야 한다.

📚 쓰기 전략

📖 Write Back 패턴

insert 쿼리를 한번에 처리하기 위해 사용된다.
여러 이용자가 동시에 제출 버튼을 누르게 되면 DB 서버에 많은 부하가 생긴다. 이 패턴을 사용하여 캐시 메모리에 데이터를 저장하고, 이후 DB에 업데이트 해주면 안전하게 쓰기 작업을 이행할 수 있다.

📖 Write Through 패턴

데이터베이스와 캐시에 동시에 데이터를 저장하는 전략이다. 데이터를 먼저 캐시에 저장하고 바로 DB에 저장하여 DB 동기화 작업을 캐시에 위임한다.
DB와 캐시가 항상 동기화 되어 캐시의 데이터가 항상 일관성있는 최신 상태를 유지한다.
데이터가 유실되지 않아야 하는 환경에서 사용하지만 성능이 감소한다.

📖 Write Around 패턴

모든 데이터를 DB에 저장하고 캐시를 갱신하지 않아 Write Through 패턴보다 빠르며 캐시 미스가 발생하는 경우에만 DB와 캐시에도 데이터를 저장한다.
데이터 불일치가 발생할 수 있으며 데이터가 변경됨에 따라 캐시도 변경 되어야 하며 캐시의 만료시간을 짧게 조정해야 한다.
읽기 패턴과 결합해서 많이 사용되는 패턴이다.


Redis를 주료 사용하는 기능

  • 인증 토큰
  • Ranking 보드
  • 유저 API Limit
  • 잡큐(list)