About Redis Pub Sub - YJGwon/connectruck GitHub Wiki
๊ธฐ๋ณธ์ ์ธ ๋์ ํ๋ฆ
channel์ ํตํด ๋ฉ์ธ์ง ์ก/์์ , redis ๊ณ ์ TCP ํ๋กํ ์ฝ์ธ RESP
๋ก ํต์
๊ฐ client๋ ํ๋ ์ด์์ channel์ subscribe
publishํ ๋๋ channel ์ง์ ํ์ฌ publish
- ๊ตฌ๋ , ๋ฐํ ์ channel ์กด์ฌ ์ฌ๋ถ ๋๋ channel์ ๊ตฌ๋ ์ ์ ๋ณด ์ ํ์ ์์
๊ตฌ๋
> SUBSCRIBE first second
subscribe
first
1
subscribe
second
2
์๋ต : subscribe + ์ฑ๋ ์ด๋ฆ + ํ์ฌ ๊ตฌ๋ ์ค์ธ ์ฑ๋ ์
๋ฐํ
> PUBLISH second Hello
์์
message
second
Hello
client์ ๊ฒฝ์ฐ ํ๋ ์ด์์ channel์ ๊ตฌ๋
ํ๊ธฐ ์์ํ๋ฉด ๊ตฌ๋
์ ๊ด๋ จ๋ ๋ช
๋ น(SUBSCRIBE
, UNSUBSCRIBE
๋ฑ)๋ง ํ ์ ์์ (โsubscribed stateโ)
- ๊ตฌ๋ ์ค์ธ ๋ชจ๋ ์ฑ๋์ ๋ํด ๊ตฌ๋ ์ ํด์งํ๋ฉด subscribe state ํด์
๋ด๋ถ ๊ตฌ์กฐ
์๋ฒ์์๋ dictionary ํํ๋ก ๊ตฌ๋ ์ ๋ณด ์ ์ฅ
- key - channel ์ด๋ฆ, value - client ์ ๋ณด list
client์์๋ ์์ ์ด ๊ตฌ๋ ํ channel ์ด๋ฆ ์ ์ฅ
- unsubscribe ๋ช ๋ น ๋ฐ subscribed state ๊ด๋ฆฌํ๋ ์ฉ๋
publishํ ๋ โ ํด๋น key์ ๋ฑ๋ก๋ client list ์ํํ๋ฉฐ ๋ฉ์ธ์ง ์ ์ก (O(N), N = ๊ตฌ๋ ์ค์ธ client ์)
vs Kafka
kafka | redis pub/sub | |
---|---|---|
์ด๋ฒคํธ ์ ์ฅ | O (at least once ๋ณด์ฅ) | X (๊ตฌ๋ ํ๋ client๊ฐ ํ์ฑ ์ํ ์๋๋ฉด ๊ทธ๋๋ก ์ฆ๋ฐ) |
์์ ํ์ | consumer group๋ด์์ 1๋ฒ๋ง | ํด๋น channel์ ๋ชจ๋ subscriber๊ฐ ์์ |
๋ฉ์ธ์ง ์ ๋ฌ ๋ฐฉ์ | pull ๋ฐฉ์ (consumer์ชฝ์์ ์ผ์ ์ฃผ๊ธฐ๋ก polling ์์ฒญ) | push ๋ฐฉ์(publishํ๋ ์ฆ์ ๋ชจ๋ subscriber์๊ฒ ์ ๋ฌ) |
์ฃผ์ํ ์
pattern subscribe
redis pub/sub์ PSUBSCRIBE
๋ผ๋ ๋ช
๋ น์ด๋ฅผ ์ง์ - channel ์ด๋ฆ ํน์ ํ์ง ์๊ณ ํจํด์ ํด๋นํ๋ channel์ ๋ฐํ๋๋ ๋ฉ์ธ์ง ๊ตฌ๋
์ด ๋ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด pattern - client ์์ linked list๋ก ์ ์ฅํด๋๊ณ publishํ ๋ ๋ชจ๋ node๋ฅผ ์ํํ๋ฉฐ ํจํด์ ๋งค์นญ๋๋ฉด ๋ฉ์ธ์ง ๋ฐ์ก
- pattern์ด ๊ฐ์๋ ์๋ก ๋ค๋ฅธ node๋ก ์ ์ฅ๋จ!
- ๊ฒฐ๊ณผ์ ์ผ๋ก๋ ํ์ฌ ํจํด ๊ตฌ๋ ์ค์ธ ๋ชจ๋ client ๊ฐ์๋งํผ ํจํด ๋งค์นญ์ ํ๋ ๊ฒ
๋ฐ๋ผ์ pattern ๊ตฌ๋ ์ ์ฌ์ฉํ๋ฉด publish์ ์๊ฐ๋ณต์ก๋๊ฐ O(N + M) - N = channel ์ด๋ฆ์ ๋ํด ๊ตฌ๋ ํ๋ client ์, M = ํ์ฌ ๊ตฌ๋ ์ค์ธ ๋ชจ๋ pattern subscriber ์
ํด๋ฌ์คํฐ๋ง ํ๊ฒฝ์์์ ์ฌ์ฉ
Redis๊ฐ ํด๋ฌ์คํฐ๋ง ๋์ด์๋ ๊ฒฝ์ฐ, ๊ทธ๋ฅ publishํ๊ฒ ๋๋ฉด ๋ชจ๋ node์ ์ด ๋ฉ์ธ์ง๊ฐ ์ ๋ฌ๋๊ณ ๊ฐ ๋ ธ๋์์ ์์ ์ด ๊ฐ์ง๊ณ ์๋ client ์ ๋ณด ํ์ํ์ฌ ๋ฉ์ธ์ง ๋ฐ์ก
- โ ๋ถํ์ํ ํต์ ์ด ๋ง์
์ด๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด version 7๋ถํฐ sharded pub/sub ์ ๊ณต
- ๊ธฐ์กด redis sharding์ ์ฐ์ด๋ hash ์๊ณ ๋ฆฌ์ฆ์ผ๋ก channel์ ํด์ํ์ฌ shardingํ๊ณ , publishํ ๋ ํด๋น node์ ๋ฉ์ธ์ง ์ ๋ฌ
SPUBLISH
,SSUBSCRIBE
๋ฑ ๊ธฐ์กด ๋ช ๋ น์ด์ S ๋ถ์ด๋ฉด sharded channel์ด ๋จ