Skip to content
This repository has been archived by the owner on Aug 13, 2022. It is now read-only.

Cache Management

cyj199637 edited this page Dec 25, 2020 · 5 revisions

📁 sns-itda의 세션 관리 방법

✅ Overview

SNS 특성상 팔로우가 많은 유저의 페이지나 소수의 게시물에 대해서 대부분의 요청이 들어오기 때문에 캐싱을 활용하면 성능을 향상시킬 수 있다고 생각했습니다. 매번 데이터베이스에서 같은 연산을 수행하는 비효율성을 개선하고 불필요한 서버 사용량을 줄이기 위해 sns-itda에서는 캐시를 다음과 같이 관리합니다.

✅ How to Manage

해당 서비스를 많은 사람들이 이용하여 Scale Out으로 서버 확장을 한 상황이라고 가정하였습니다. 글로벌 캐싱은 캐시 데이터를 얻으려 할 때마다 캐시 서버로의 네트워크 트래픽이 발생하기 때문에 로컬 캐싱보다 속도는 느립니다. 하지만 서버 간에 캐시 데이터를 쉽게 공유할 수 있기 때문에 데이터 일관성 문제를 해결할 수 있습니다. 따라서, 글로벌 캐싱 전략을 선택하여 캐시를 관리합니다.

Redis config 파일에서 지정한 maxmemory보다 데이터가 많아지면 지정한 Eviction 정책에 따라 데이터가 삭제됩니다. allkeys-lfu는 얼마나 많이 요청되었는지에 따라 데이터 보존 여부가 나뉘기 때문에 최근에 요청했더라도 사람들이 잘 찾지 않는 리소스라면 삭제 대상이 됩니다. 즉, 재요청될 가능성이 낮은 데이터가 먼저 삭제할 수 있다는 것입니다. 요청이 많이 들어오는 데이터를 보존한다면 그만큼 데이터베이스에 접근하는 횟수를 줄일 수 있기 때문에 allkeys-lfu 정책을 선택했습니다.

✅ Used Cache Storage

  • Redis

Cache Management

✅ 관련 글

Clone this wiki locally