결론
Redis pub/sub은 scale out 시에 주의해서 사용해야합니다.
Kafka vs Redis
Kafka와 Redis의 주된 차이점은 다음과 같습니다.
- 이벤트의 저장 여부
- 한 이벤트를 받을 수 있는 Subscriber(Consumer) 개수
이벤트의 저장 여부
Kafka는 발행된 이벤트(토픽)가 각 partition에 저장됩니다.
하지만 Redis는 발행된 이벤트(메시지)를 저장하지 않기 때문에, 구독자가 없다면 해당 이벤트는 사라집니다. 휘발.
따라서,
- 이벤트의 구독과 발행이 실시간으로 이루어져야 되는 상황인지,
- 혹은 언제든 발행된 이벤트를 읽으면 되는 상황인지
에 따라 선택이 달라질 수 있습니다.
한 이벤트를 받을 수 있는 Subscriber(Consumer) 개수
Redis pub/sub은 subscriber의 개수에 따라 0 to n 개의 토픽 메시지를 받을 수 있습니다.
만약 Kafka를 사용한다면 Consumer 수와 관계없이,
프로듀서가 발행하는 하나의 토픽이 발행되어, 하나의 Consumer 만이 토픽을 수신하게 됩니다.
그런데 Redis pub/sub 의 경우 Subscriber 커넥션을 가지고 있는 서버를 증설하게 되면,
한 번의 PUBLISH 로 두 개의 메시지(토픽)를 얻게 됩니다.
즉, 한 이벤트에 대해 한 번의 기능만 작동되어야 한다면 Kafka를 사용하는 것이 유리합니다.
반대로 Redis의 pub/sub 기능이 필요할 때도 있습니다.
예를 들어, 변경/갱신된 이벤트를 모든 subscriber가 수신할 필요가 있을 때.
chanel을 구독한 모든 subscriber는 이벤트를 받을 수 있습니다.
→ 증폭과 같은 효과
멱등성을 이용해 리스트를 갱신하는 식으로 사용하는게 best practice
→ 분산 환경에서 캐시 동기화가 best case
결론은, 발행된 이벤트에 대해 특정 작업이 한 번만 발생하여야 하는지,
모든 Subscriber에서 발생되어야 하는지에 따라 다른 선택을 할 수 있습니다.
'Redis' 카테고리의 다른 글
여전히 과반이 필요한 Redis Sentinel (1) | 2023.06.30 |
---|---|
Redis pub/sub (0) | 2023.05.29 |