์์ธ ์ ๋ณด
์์ธ ์ ๋ณด๋ ๊ฑฐ๋์๋ก๋ถํฐ ์ค์๊ฐ์ผ๋ก ์ ๋ณด๋ฅผ ๋ฐ๋๋ค.
์๋ฌด๋๋ ์์ธ ์ ๋ณด๋ฅผ ๋ค๋ฃจ๋ ค๋ฉด ์ค์๊ฐ์ผ๋ก ๋ค๋ฃจ์ด์ผ ํ๊ธฐ ๋๋ฌธ์,
๋ฎ์ ์ง์ฐ์๊ฐ, ๋น ๋ฅธ ์ฅ์ ๋ณต๊ตฌ
๋ฅผ ์ฐ์ ์ ํด์ผํ๋ค.
ํ ์ค์ ์์ธ์ ๋ณด ์ฒ๋ฆฌ ๊ณผ์ ์ ์ดํด๋ณด๊ฒ ๋ค.
- ๊ฑฐ๋์๋ก๋ถํฐ ๋ฐ์์ค๋ ์์ธ ์ ๋ณด๋ฅผ UDP ๋ฉํฐ์บ์คํธ ๊ทธ๋ฃน์ ์ ์ํด์ ์ฝ์ด์จ๋ค.
๋น ๋ฅธ ํต์ ์ ์ํด์ UDP๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋ค.
์ด ๋, ํค๋์ ์์ ์๊ฐ์ ํฌํจํ์ฌ ์ฒ๋ฆฌ๋ถ์์ ์ด ์ฒ๋ฆฌ ์๊ฐ์ ์ธก์ ํ๋ค. - ์ฒ๋ฆฌ๋ถ๊ฐ Redis์ ์ ์ฅํ๊ณ , REST API๋ฅผ ์ ๊ณตํ๋ค.
์ฒ๋ฆฌ๋ถ๊ฐ ๋น์ง๋์ค ๋ก์ง์ด ๊ฐ์ฅ ๋ง๊ธฐ ๋๋ฌธ์ ์ฅ์ ๋ฐ์ ํ๋ฅ ์ด ๊ฐ์ฅ ๋๋ค.
๋ฐ๋ผ์, ์ฒ๋ฆฌ๋ถ๋ฅผ ์ฌ๋ฌ๊ฐ๋ก ๋๋ฆฌ๋ ๋ฐฉ๋ฒ์ ์ ํํ๋ค.
ํ์์๋ ํ ์ฒ๋ฆฌ๋ถ(์ฒ๋ฆฌ๋ถ A)๋ฅผ ๊ฐ๋ํ๋ค๊ฐ, ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋ถ B๋ก ์ ํํ ์ ์๋ค.
ZooKeeper๋ฅผ ํตํด ๋ฆฌ๋๋ฅผ ์ ์ถํ๊ณ , ๊ฐ ๋ฆฌ๋๋ง DB์ ๊ทผ์ ํ์ฉํด ๋ฐ์ดํฐ ์ค๋ณต์ ๋ง์ ์ ์๋ค.
์ด ๋ฐฉ๋ฒ์ ๋ฐฐํฌ ๋ถ๋ด๊ฐ๋ ์ค์ผ ์ ์์ผ๋ฉฐ, ์ฅ์ ๋ฐ์์ ๋๋นํ ์ ์๋ค.
ํ์ง๋ง, ์ฒ๋ฆฌ๋ถ๊ฐ ๋์ด๋๋ฉด์ ์์ ๋ถ๊ฐ ๋ณด๋ด์ผ ํ๋ ๋ฐ์ดํฐ์ ๋ถ๋ด๊ฐ์ด ๋์ด๋ฌ๋ค.
์ฒ๋ฆฌ๋ถ์ ๊ฐ์๋งํผ ๋ณด๋ด์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฉ์์ง ๋ธ๋ก์ปค๋ฅผ ์ฌ์ฉํ๋ค.
๋ฉ์์ง ๋ธ๋ก์ปค๋ฅผ ํตํด ์์ ๋ถ์ ์ฒ๋ฆฌ๋ถ๋ฅผ ๋
๋ฆฝํํ๊ณ , ์์ ๋ถ๋ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ๋ง ์ ์กํด๋ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด, ๋ฉ์์ง ๋ธ๋ก์ปค๊ฐ ์ง์ฐ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ์ ํํ ๋ชฉ๋ก์ ์ดํด๋ณด์.
- UDP ๋ฉํฐ์บ์คํธ
๋ณดํต ๋น๋์ค ์คํธ๋ฆฌ๋ฐ, ๊ฒ์ ๋ฑ ์ค์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ์๋น์ค์ ๋ง์ด ์ด์ฉ๋๋ค. ๋ผ์ฐํฐ ์ค์ , ๋ฐฐํฌ ์ค์ ์ด ํ์ํ๋ค. - Kafka
ํ์ ์์ ๋ง์ด ์ฌ์ฉํ๋ ๋ถ์ฐํ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ ํ๋ซํผ. - Redis Pub/Sub
Redis Publish/ Subscribe. ๋ง ๊ทธ๋๋ก, ํน์ ํ ์ฃผ์ ๋ฅผ ๊ตฌ๋ ํ ์์ ์๋ค์๊ฒ ๋ฉ์์ง๋ฅผ ๋ฐํํ๋ ํต์ ๋ฐฉ๋ฒ์ด๋ค.
3๋ฒ์ ์ง์ฐ์๊ฐ์ด ๊ฐ์ฅ ๋ฎ์์ ์ ํํ๊ฒ ๋๋ค๊ณ ํ๋ค.
Redis Pub/Sub
Redis Publish/Subcribe
Publish/Subscribe ๊ตฌ์กฐ์์ ์ฌ์ฉ๋๋ Queue๋ฅผ ์ผ๋ฐ์ ์ผ๋ก Topic์ด๋ผ๊ณ ํ๋ค.
์ฃผ์ ๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๋ณดํต์ ์ฑํ
๊ธฐ๋ฅ์ด๋, ํธ์ ์๋ฆผ ๋ฑ์ ๋ง์ด ์ด์ฉ๋๋ค. ๋จ์ํ๊ฒ sender๊ฐ ํน์ ๋ฐ์ดํฐ๋ฅผ publishํ๋ฉด, sender๋ฅผ subscribeํ receiver๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฌํ pub/sub ์์คํ
์ ๋งค์ฐ ๋จ์ํ ๊ตฌ์กฐ๋ก ๋์ด์๋ค.
๋ฉ์์ง๋ฅผ ๋ฐ๋ก ๋ณด๊ดํ์ง ์์ผ๋ฉฐ, ์๋๊ฐ ๋ฉ์์ง๋ฅผ ๋ฐ์์ง๋ฅผ ํ์ธํ์ง๋ ์๋๋ค.
Redis๋ In-Memeory ๊ธฐ๋ฐ์ด๊ธฐ ๋๋ฌธ์ ์น ์์ผ์ ์ด์ฉํ ์์คํ
๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๋ค.
Event Loop
์ฒ๋ฆฌ๋ถ์์๋ Reid Pub/Sub๊ณผ TCP ์ฐ๊ฒฐ์ ๋งบ์ผ๋ฉด์ TCP Flow Control์ ์ํํจ์ ๋ฐ๋ผ ๋ง์ ์ง์ฐ์๊ฐ์ ๊ณ ๋ คํ ์๋ฐ์ ์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ๋น์ง๋์ค ๋ก์ง์ ํฌํจํ๋ ์ฒ๋ฆฌ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ์ฒ๋ฆฌ๋ถ์๊ฒ ๋ณ๋ ์ค๋ ๋๋ฅผ ์์ํ๋ ๊ฒ์ด ์ข๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ๋ฉํฐ ์ค๋ ๋ฉ์ ์ฌ์ฉํ๋ค๋ฉด, ์๊ฐ ์ ์ฒ๋ฆฌ๋์ด์ผ ํ ๋ก์ง์ด ์ญ์ ๋ ์ ์๋ค.
๊ทธ๋์ EventLoopGroup์ ์ฌ์ฉํ์ฌ Queue๋ฅผ ์ด์ฉํด ์์๋ฅผ ๋ณด์ฅํ ๋ชจ์ต์ด๋ค.
Event Loop ๊ตฌํ
์ด EventLoop๋ Spring์ ThreadPoolTaskExecutor๋ฅผ ์ฌ์ฉํ๊ณ ,
corePoolSize = 1
maxPoolSize = 1
๋ฅผ ์ค์ ํ์ฌ ๋ง๋ค ์ ์๋ค.
์ค์๊ฐ์ฑ์ ๊ณ ๋ คํด์, Queue๊ฐ ๊ฝ ์ฐฐ ๊ฒฝ์ฐ DiscardOldestPolicy์ ์ฑํํ์ฌ ์ค๋๋ ์์ ์ ์ง์ฐ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋๊ฒ ์ ๋ฆฌํ๋ค๊ณ ๋ณผ ์ ์๋ค.
QueueCapacity๋ ๋๋ฌด ํฌ๋ฉด ์ค์๊ฐ์ฑ์ด ๋จ์ด์ง ์ ์๊ณ , ๋๋ฌด ์์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ชฐ๋ฆฌ๋ ์๊ฐ์ ์ง์ฐ์ด ๋ง์์ง ์ ์๋ค. ์ด์ ๋ฐ๋ผ ์ ๋นํ๊ฒ ์กฐ์ ํด์ผ ํ๋ค.
List<ThreadPoolTaskExecutor>
ThreadPoolTaskExecutor๋ฅผ List ํํ๋ก ๋ง๋ ๋ค.
์ฌ๊ธฐ์ List์ ๊ฐ์ = EventLoop ๊ฐ์ ๋ฅผ ๋ปํ๋ค.
EventLoop์ ๊ฐ์๊ฐ
๋์ด๋ ์๋ก : ๋ง์ Context Switch ์ฑ๋ฅ ๋จ์ด์ง
๋๋ฌด ์์ผ๋ฉด : EventLoop์ BackPressure ๋ฐ์, ์ง์ฐ ์๊ฐ ๋์ด๋จ
-> ๋ชฉํ ํธ๋ํฝ์ ๋ฐ์์ํค๋ฉฐ ๋ชจ๋ํฐ๋ง ํ์ฌ ์ ์ ํ ์๋ฅผ ์ฐพ์๋ค๊ณ ํ๋ค.
Lettuce
Spring Data Redis๊ฐ ์ ๊ณตํ๋ Redis Client ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋คํธ์ํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Netty๋ฅผ ์ฌ์ฉํ๊ณ , Netty์ Channel์ Socket์ ์ถ์ํํ ๋ ์ด์ด์ด๋ค.
์ปค๋ฅ์
์ด ๋งบ์ด์ง ์ดํ EventLoop์ ๋ฑ๋ก ๋๋ค.
Event Loop๊ฐ ๋ฌดํ ๋ฃจํ๋ฅผ ๋๋ฉด์ ์์ ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ค.
'BackEnd > Server' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Apache JMeter๋ก NGNIX์ ๋ก๋๋ฐธ๋ฐ์ฑ ์ฑ๋ฅ ํ ์คํธ (0) | 2023.09.02 |
---|---|
[NGNIX] ์๋ฒ SSL ์ค์ (0) | 2023.09.02 |
[SLASH 23] PinPoint๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ฐ์ถ์ ํ๊ธฐ (0) | 2023.09.02 |
CORS (0) | 2023.09.02 |
aws EC2, ๊ฐ๋น์๋ฅผ ์ด์ฉํ์ฌ Spring Project ์ง์ ๋ฐฐํฌํด๋ณด๊ธฐ + SSL (0) | 2023.09.01 |