Foundational RabbitMQ - JAVACAFE-STUDY/RabbitMQ-in-Depth GitHub Wiki
Foundational RabbitMQ
RabbitMQ๋ ๋ถ์ฐ ์ํํธ์จ์ด ์ํคํ ์ฒ๋ฅผ ์ํ ๊ฐ๋ณ๊ณ ๊ฐ๋ ฅํ ๋๊ตฌ์ด๋ค.
RabbitMQ์ ๊ธฐ๋ฅ๊ณผ ์ฅ์
- Open source
- Platform and vendor neutral
- Lightweight
- 40MB๋ณด๋ค ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉ(ํ๋ฌ๊ทธ์ธ ํฌํจ / ํ์ ์ ์ฌ๋ ๋ฉ์์ง ๋ฏธํฌํจ)
- Client libraries for most modern languages
- ๋๋ถ๋ถ์ ์ธ์ด ์ง์
- ๋ค๋ฅธ Runtime ์ ํ๋ฆฌ์ผ์ด์
์ฌ์ด์์ ๋ฐ์ดํฐ ๊ณต์ ์, RabbitMQ๋ฅผ ์ ์ฉํ๊ฒ ์ด์ฉํ ์ ์์
JAVA
<โ>RabbitMQ
<โ>.NET
- Flexibility in controlling messaging trade-offs
- ์์คํ
์ ํน์ฑ์ ๋ฐ๋ฅธ ์ ๋ขฐ์ฑ๊ณผ ์ฑ๋ฅ ๊ฐ์ ํธ๋ ์ด๋ ๋กํ๋ฅผ ์ ์ฐํ๊ฒ ์กฐ์ ๊ฐ๋ฅ
- ์ ๋ขฐ์ฑ์ ๋์ธ๋ค๋ฉด?
- ์ฅ์ ๋ณต๊ตฌ ์ ๋ฉ์์ง ๋ณต์์ ์ํด ๋ฉ์์ง๋ฅผ ๋์คํฌ์ ์ ์ฅ
- HA ๊ตฌ์ฑ์ ์ํด ํ๋ฅผ ๋ณต์ ๊ฐ์ ์๋ฒ์ ๋ณต์
- ์ฑ๋ฅ์ ๋์ธ๋ค๋ฉด?
- Disk I/O๋ฅผ ์ค์ด๊ธฐ ์ํด ๋ฉ์์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์๋ง ์ ์ฅ
- ๋ฉ์์ง ๋ณต์ ์ ์ฌ์ฉ๋๋ ์๊ฐ๊ณผ ๋ฆฌ์์ค๋ฅผ ์ค์ด๊ธฐ ์ํด ๋จ์ผ ์๋ฒ์ ํ ๊ตฌ์ฑ
- ์ ๋ขฐ์ฑ์ ๋์ธ๋ค๋ฉด?
- ์์คํ
์ ํน์ฑ์ ๋ฐ๋ฅธ ์ ๋ขฐ์ฑ๊ณผ ์ฑ๋ฅ ๊ฐ์ ํธ๋ ์ด๋ ๋กํ๋ฅผ ์ ์ฐํ๊ฒ ์กฐ์ ๊ฐ๋ฅ
- Plugins for higher-latency environments
- Multiplexes ์ง์์ ์ํจ?
- ํ๋์ TCP Connection์์ ์ฌ๋ฌ Channel์ ์ค๋ ๋๋น ํ ๋นํ์ฌ ์ฌ์ฉํ๋ ๊ธฐ์
- Connection์ด๋ Channel์ ๋ฐ๋ณต์ ์ผ๋ก ์ด๊ณ ๋ซ๊ณ ํ์ง ์๊ธฐ ์ํด long-lived connection ์ฌ์ฉ
- Multiplexes ์ง์์ ์ํจ?
- Third-party plugins
- Layers of security
- SSL ํต์ ๊ธฐ๋ฐ์ ์ํธํ ์ ๊ณต (TLS support)
- virtual-host๋ผ๋ ๋ฉ์์ง์ ์์ ๊ฒฉ๋ฆฌ๋ฅผ ์ํ high-level ์ ๊ณต (host๊ฐ์ ๋ ผ๋ฆฌ์ ๊ณต๊ฐ ๋ถ๋ฆฌ)
- LDAP๊ณผ ๊ฐ์ ์ธ๋ถ ์ธ์ฆ ์์คํ ํตํฉ์ ์ํ ํ๋ฌ๊ทธ์ธ ์ ๊ณต
RabbitMQ์ Erlang
- RabbitMQ written in Erlang
- Functional programming language
- designed to be a distributed, fault-tolerant, soft real-time system for applications that require 99.999% uptime
- focused on concurrent processing and message passing
- concurrent processing โ RabbitMQ์ ๋ฉ์์ง ๋ธ๋ก์ปค (concurrent connections)
- message passing โ RabbitMQ์ ๋ฉ์์ง ๋ผ์ฐํ
- RabbitMQ์ ํด๋ฌ์คํฐ๋ง ๋ฉ์ปค๋์ฆ
RabbitMQ์ AMQP
RabbitMQ๋ฅผ ์ฌ์ฉํ๋ ๊ณณ๋ค
-
Reddit: ์จ๋ผ์ธ ์ปค๋ฎค๋ํฐ
- ์ ์ ๊ฐ์ , ํฌ์คํธ ๋ฑ๋ก, ํฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉ
-
์ด ์ธ Game data & event, Sensor, Metric ์์ง์ ์ฌ์ฉ
-
11st
๋์จํ๊ฒ ๊ฒฐํฉ๋ ์ํคํ ์ฒ์ ์ฅ์
AS-IS
TO-BE
Decoupling your application
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ด DB(์ ํผํฌ๋จผ์ค)์ ๊ฐํ๊ฒ ์ข ์๋์ด ์์
Decoupling database writes
- ์ ์ง๋ณด์๋ฅผ ์ํด DB ์คํ๋ผ์ธ ๊ฐ๋ฅ
- DB์ ๋ถํ๊ฐ ๋๋ฌด ์ฌํ ๊ฒฝ์ฐ, consumer๋ฅผ ์กฐ์ ํ์ฌ throttling ๊ฐ๋ฅ
Seamlessly adding new functionality
Replication of data and events
- ๊ธฐ๋ณธ ๋ด์ฅ๋ federation ํ๋ฌ๊ทธ์ธ์ ์ด์ฉํ์ฌ, ๋ค๋ฅธ ๋ฐ์ดํฐ ์ผํฐ ๊ฐ์ ๋์ผ ๋ฐ์ดํฐ ์ ์ง ๊ฐ๋ฅ
Multi-master federation of data and events
The Advanced Message Queuing model
- AMQP์ ์คํ์ผ๋ก ์ธํด RabbitMQ๋ ์ ์ฐํ๊ฒ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅ
- AMQ model์ ์กด์ฌํ๋ 3๊ฐ์ง ์ปดํฌ๋ํธ
-
Exchange - Publisher(Producer)๋ก๋ถํฐ ์์ ํ ๋ฉ์์ง๋ฅผ ํ์ ๋ถ๋ฐฐํ๋ ๋ผ์ฐํฐ์ ์ญํ
- Direct exchange: ๋ฐ์ธ๋ฉ ๋ Queue ์ค์์ ๋ฉ์์ง์ ๋ผ์ฐํ ํค์ ๋งคํ๋์ด ์๋ Queue๋ก ๋ฉ์์ง๋ฅผ ์ ๋ฌ(1:1)
- Fanout exchange: ๋ฉ์์ง์ ๋ผ์ฐํ ํค๋ฅผ ๋ฌด์ํ๊ณ Exchange์ ๋ฐ์ธ๋ฉ ๋ ๋ชจ๋ Queue์ ๋ฉ์์ง๋ฅผ ์ ๋ฌ(1:N)
- Topic exchange: Exchange์ ๋ฐ์ธ๋ฉ ๋ Queue ์ค์์ ๋ฉ์์ง์ ๋ผ์ฐํ ํค๊ฐ ํจํด์ ๋ง๋ Queue์๊ฒ ๋ชจ๋ ๋ฉ์์ง๋ฅผ ์ ๋ฌ(Multicast)
- Headers exchange: ๋ผ์ฐํ ํค ๋์ ๋ฉ์์ง ํค๋์ ์ฌ๋ฌ ์์ฑ๋ค์ ๋ํด ์์ฑ๋ค์ด ๋งค์นญ๋๋ ํ์ ๋ฉ์์ง๋ฅผ ์ ๋ฌ
-
Queue - ๋ฉ์์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ์ ์ ์ฅํ๋ค๊ฐ Consumer์๊ฒ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ์ญํ
-
Binding - Exchange์ Queue์ ๊ด๊ณ๋ฅผ ์ ์
- RabbitMQ๋ AMQP ์คํ์ ํ์ฅํ์ฌ exchange-to-exchange biding์ ์ง์ํ์ฌ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ผ์ฐํ ์ด ๊ฐ๋ฅ
-