T_era
6. Redis pub/sub과 streams 본문
- redis pub sub 기능
- redis를 활용하여 메시지를 발행하고 구독하는 서비스
- 특징
- Redis Pub/Sub 시스템에서 동일한 채널을 여러 구독자가 구독하면, 해당 채널로 발행된 메시지가 모든 구독자에게 발송
- 한번 발송된 메시지는 저장되지 않음
- 보편적인 웹서비스는 사용자가 요청하기 전까지 데이터를 갱신해주지 않지만 이 기능은 사용자가 보낸 내용을 구독자에게 바로 갱신해준다
- 근데 만약 서버가 2대이상이고 사용자가 각자 다른 서버에 연결되어 있을 때 각 서버에 반대 사용자 정보가 존재하지 않게된다 이를 해결하기 위한 기능
1. 서버1-유저1, 서버2-유저2 일때 각 서버는 redis서버를 구독한 상태가 된다
2. 유저1이 메시지를 보내면 서버1은 redis에게 유저2한테 전해야할 데이터를 발행한다
3. redis는 서버2의 유저2정보를 찾아서 데이터를 전송한다
즉, pub/sub은 전송한 메시지를 구독자에게 전파하는 전파자의 역할을 해준다
- 실습예시)
- 터미널1 : SUBSCRIBE test_channel
- 터미널2 : PUBLISH test_channel "Hello, this is a test message"
- 활용
- 기본적으로 채팅과 같은 서비스의 경우 특정 서버에 서비스가 의존적이기에 다수의 서버를 운용하면서 채팅서비스(또는 알림서비스)를 운영할때에 pub/sub 구조 활용가능
- 메시지를 받는 유저가 없으면 데이터가 유실된다(서버가 다운되면 그대로 사라진다)
- redis streams (얘쓸바에 kafka씀)
- pub/sub과 다르게 stream은 메시지가 저장되어 소비자가 나중에라도 읽을 수 있음
- kafka와 자료구조가 유사
- 실습예시)
- XADD test_stream * message "Hello, this is a test message"
- XADD : Redis Stream에 데이터를 추가할 때 사용
- test_stream: 스트림 이름
- *: 메시지의 고유 ID를 Redis가 자동 생성
- XREAD BLOCK 10000 STREAMS test_stream $
- BLOCK 10000: 최대 10초(10000ms) 동안 대기
- $: 현재 마지막 메시지 이후에 오는 새 메시지를 기다림.
- XRANGE test_stream - +
- XRANGE 명령어는 Redis Stream에서 메시지를 조회할 때 사용
- - : 시작 범위(처음부터)
- +: 끝 범위(끝까지)
- XADD test_stream * message "Hello, this is a test message"
- 활용
- 이벤트 기반 시스템(비동기 프로그래밍) => kafka가 더좋음
- 서버가 죽어도 이벤트기반 메시지가 남아있기 때문에 다시 살아난 후에 마저 읽어서 작동해서 이슈가 줄어듬ㅌ - 채팅 및 알림 시스템
- 이벤트 기반 시스템(비동기 프로그래밍) => kafka가 더좋음
stream과 pub/sub의 차이
- pub/sub은 데이터가 저장되지 않음
- stream은 데이터가 실시간으로 저장됨
msa 서비스
- 각 기능별 db서버를 따로 두고 필요에 따른 서버에만 요청을 한다
- 서버하나가 작동을 안해도 나머지는 작동을 하기때문에 전체서버는 살아있다
- 동기/비동기를 섞어서 사용한다(동기 : 요청응답이 올 때까지 대기, 비동기 : 요청만 해놓고 다른 작업도 수행 가능)
'이론 > 백엔드 개념정리' 카테고리의 다른 글
| Redis, RabbitMQ, Kafka의 차이점 (0) | 2025.04.30 |
|---|---|
| 7. Redis 서버구성 (0) | 2025.04.30 |
| 5. Redis hashes관련 (0) | 2025.04.30 |
| 4. Redis Set과 zSet관련 (0) | 2025.04.30 |
| 3. Redis List관련 (0) | 2025.04.30 |