You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Aug 13, 2022. It is now read-only.
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 정책을 선택했습니다.