개인 프로젝트로 진행하는 쇼핑몰 프로젝트에서 상품 랭킹 서비스 구현을 Redis의 Read Through + Write back 패턴을 활용하여 구현한 내용을 정리 해보자 📒
현재 프로젝트에서 사용자가 상품 조회요청을 보내면 Product-service에서 Rank-Service로 조회요청에 대한 이벤트를 발행하고 이를 Rank-service 쪽에서 Consume하여 조회수를 증가 시키고 있습니다!
Redis의 대표적인 읽기 전략
1. Look Aside 패턴
2. Read Through 패턴
Redis의 대표적인 쓰기 전략
1. Write Back 패턴
2. Write Through 패턴
3. Write Around 패턴
1. DB 접근의 최소화
현재 쇼핑몰의 메인 페이지에서, 상단 헤더 부분에 상품 랭킹에 대한 정보 들을 계속 보여줄 예정이다, 그렇다면 트래픽이 상승할 경우 랭킹 DB에 대한 접근이 많아질 것이고, 이때 부하를 일으킬 것을 가정하였다
2. Cluster 구성
일단 Read Through 패턴은 Redis에게 데이터 동기화를 위임하기 때문에 Redis단일로 사용하게 된다면 Redis가 장애를 일으킨다면 상당히 치명적일 수 있다. 하지만 현재 프로젝트에서 Redis Cluster를 구성하여 사용할 것이 판단하여 Redis 장애에 대한 가용성을 높일 수 있을거라 생각되었다
1. DB 접근의 최소화
현재 kafka를 통해 상품 클릭시 product-service에서 이벤트를 발행하고 rank-service에서 이를 consume 하여 사용중이다 이때 많은 사용자가 있으며, 상품클릭에 대한 트래픽이 높다고 가정하고있다, 그렇기 때문에 이벤트 consume시 DB에 직접 write를 한다면 DB에 부하가 가해질 것으로 가정하였고, 이를 해결하기 위해 write-back 패턴을 도입 구체적으로 배치 작업 + jdbc bulk insert를 통해 쓰기작업을 이용하여 DB에 부하를 줄일 수 있을것으로 생각 되었다.
위에 나열한 이유와 랭킹서비스가 서비스 전체를 보았을때 치명적인 오류를 일으키지 않을것으로 판단하여 선택하게 되었다!