실시간 추천 서비스를 위해 메시지 큐잉 도입하기(with Redis Streams)
LY Corporation Tech Blog
안녕하세요. 오늘은 LINE앱 내의 LINE VOOM의 추천시스템에 메시지 큐로 Redis Streams를 적용한 사례를 소개합니다.
저도 Redis를 꽤 오래 사용했고, redis pub/sub을 사용해서 메시지큐로 사용하곤했었는데요. Redis Streams를 적용한 사례는 처음봐서 소개드립니다.
처음에는 Go 채널을 사용했지만, 여러가지 제약이 있어서 Redis Streams로 바꾸게 되었가고 합니다. Redis Streams를 선택한 이유는 여러 파드에서 중복 없이 처리가 가능하고, 실패한 메시지도 재처리할 수 있으며, 사내 인프라를 활용할 수 있는 장점이 있어서 도입을 해보기로 했다고 합니다.
Redis Streams 적용 후에는 또 다른 문제가 발생했습니다. 하나의 Stream에 데이터가 한 샤드에 집중되면서 메모리 부족 현상이 벌어진 거죠. 이는 Redis 클러스터의 해시 슬롯 분배 방식을 제대로 고려하지 않아서 생긴 문제였다고 하네요.
이 문제를 해결하기 위해 '쿠폰 수집가 문제'를 활용했다고 합니다. 이 방법으로 최소한의 키 개수로 모든 샤드에 키를 배정할 수 있는지를 계산할 수 있었습니다. 계산 결과 17개 이상의 Stream 키를 만들면 95% 확률로 모든 샤드에 키가 배정된다고 합니다.
저는 '쿠폰 수집가 문제'라는 용어는 처음들었습니다만, 서버개발을 하면 겪게되는 샤드쏠림현상을 해결해주는 좋은 솔루션 같습니다.
운영할 때는 Redis Streams의 온/오프 스위치와 전용 모니터링 API를 만들어서 유연하고 편리하게 운영할 수 있게되었다고 합니다.
실시간 추천 시스템에 Redis Streams 도입이라는 어려운결정을 내리고 그것을 또 잘 운영하고 있다니 대단하다는 생각이듭니다. 여러분도 시간될때 꼭 읽어보세요~
https://techblog.lycorp.co.jp/ko/building-a-messaging-queuing-system-with-redis-streams?utm_source=x&utm_medium=devrel
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 4월 4일 오전 2:16
안
... 더 보기이번에 우아한형제들 기술 블로그에 "타입 안전한 API 모킹으로 프론트엔드 생산성 높이기"라는 새 글을 발행하게 되었습니다.
... 더 보기