실시간 추천 시스템 구축 과정에서의 Redis Streams 적용 사례

안녕하세요. 오늘은 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


실시간 추천 서비스를 위해 메시지 큐잉 도입하기(with Redis Streams)

LY Corporation Tech Blog

실시간 추천 서비스를 위해 메시지 큐잉 도입하기(with Redis Streams)

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 4월 4일 오전 2:16

 • 

저장 14조회 3,213

댓글 0

    함께 읽은 게시물

    🤏 백엔드 개발에 도움되는 학습 도서 📚

    많은 분들께서 긱뉴스에서 공개한 무료 학습 자료를 공유해주셨는데요, 저는 그중에서 백엔드 개발에 도움되는 도서는 어떤게 있을지 골라보았습니다. 제가 하고있는 업무와 연관이 있는 도서들을 골라본거라 모든 백엔드 개발자가 반드시 배워야 한다는 아니지만, 적어도 배워두면 써먹을 수 있다는 수준으로 이해해 주세요 🙏 ✔️ Java (https://github.com/EbookFoundation/free-programming-books/blob/main/books/free-programming-books-ko.md#java) Java 는 현재 매우 인기있는 백엔드 개발 언어입니다. 특히 대량의 트래픽을 대응하거나 다양한 솔루션과의 연계를 위해 많은 회사에서 Java 를 사용하고 있습니다. 점프 투 자바는 이런 Java 의 기초적인 내용을 학습하기 좋은 도서로 저도 많은 도움을 받았던 도서입니다. ✔️ Git (https://github.com/EbookFoundation/free-programming-books/blob/main/books/free-programming-books-ko.md#git) 이건 사실 백... 더 보기

     • 

    댓글 8 • 저장 957 • 조회 26,323


    < 왜 어떤 제품에만 '열광적인 팬'이 생길까요? >

    1

    ... 더 보기

    🧭 우리만의 디자인 시스템, 어디서부터 시작할까?

    ... 더 보기

    우리만의 디자인 시스템, 어디서부터 시작할까? · DaleStudy/daleui · Discussion #392

    GitHub

    우리만의 디자인 시스템, 어디서부터 시작할까? · DaleStudy/daleui · Discussion #392

    앞으로의 코테는 설명을 주고 코드를 짜라고 하는 것이 아니라, 코드를 주고 설명을 하라는 것이 유효할 것이다.


    내 경우는 이미 그렇게 하고 있는데, 요구사항을 주고 개발을 요청. 결과물이 요구사항대로 개발이 잘 되었다면, 다음 단계로 제출한 코드를 리뷰하며 설명을 요청한다.


    ... 더 보기

     • 

    저장 2 • 조회 903


    기능 정의의 중요성

    자주 사용하는 공통기능을 하나의 모듈로 만들어 놓고, 필요할때 마다 참고 하는 성향이 있어서 개인적인 공간에 작업물을 정리 하거나, 나만의 모듈로 만드는 것을 종종 진행하고 있어요.

    ... 더 보기

    자바 25를 사용해야 하는 이유

    ... 더 보기

    곧 출시될 자바 25는 가능한 빨리 도입하세요

    kr.linkedin.com

    곧 출시될 자바 25는 가능한 빨리 도입하세요

     • 

    저장 15 • 조회 1,412