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
  • 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์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ฉ”์ปค๋‹ˆ์ฆ˜

Foundational%20RabbitMQ/Untitled.png

RabbitMQ์™€ AMQP

RabbitMQ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณณ๋“ค

  • Reddit: ์˜จ๋ผ์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ

    • ์œ ์ € ๊ฐ€์ž…, ํฌ์ŠคํŠธ ๋“ฑ๋ก, ํˆฌํ‘œ ๊ธฐ๋Šฅ์— ์‚ฌ์šฉ

    http://2.bp.blogspot.com/_swahP4sgx0k/S4v_wE8cr5I/AAAAAAAAACk/CmV9zw4O8O4/s1600/RedditArchDiagramWhiteBG.png

  • ์ด ์™ธ Game data & event, Sensor, Metric ์ˆ˜์ง‘์‹œ ์‚ฌ์šฉ

  • 11st

    Foundational%20RabbitMQ/452BC874-6395-4A66-85F5-8EEBB40F316A.jpeg

๋Š์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ์•„ํ‚คํ…์ฒ˜์˜ ์žฅ์ 

AS-IS

Foundational%20RabbitMQ/Untitled%201.png

TO-BE

Foundational%20RabbitMQ/Untitled%202.png

Decoupling your application

Foundational%20RabbitMQ/Untitled%203.png

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์ด DB(์˜ ํผํฌ๋จผ์Šค)์— ๊ฐ•ํ•˜๊ฒŒ ์ข…์†๋˜์–ด ์žˆ์Œ

Decoupling database writes

Foundational%20RabbitMQ/Untitled%204.png

  • ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•ด DB ์˜คํ”„๋ผ์ธ ๊ฐ€๋Šฅ
  • DB์— ๋ถ€ํ•˜๊ฐ€ ๋„ˆ๋ฌด ์‹ฌํ•  ๊ฒฝ์šฐ, consumer๋ฅผ ์กฐ์ •ํ•˜์—ฌ throttling ๊ฐ€๋Šฅ

Seamlessly adding new functionality

Foundational%20RabbitMQ/Untitled%205.png

Replication of data and events

Foundational%20RabbitMQ/Untitled%206.png

  • ๊ธฐ๋ณธ ๋‚ด์žฅ๋œ federation ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ด์šฉํ•˜์—ฌ, ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๊ฐ„์— ๋™์ผ ๋ฐ์ดํ„ฐ ์œ ์ง€ ๊ฐ€๋Šฅ

Multi-master federation of data and events

Foundational%20RabbitMQ/Untitled%207.png

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: ๋ผ์šฐํŒ… ํ‚ค ๋Œ€์‹  ๋ฉ”์‹œ์ง€ ํ—ค๋”์— ์—ฌ๋Ÿฌ ์†์„ฑ๋“ค์„ ๋”ํ•ด ์†์„ฑ๋“ค์ด ๋งค์นญ๋˜๋Š” ํ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌ

      Foundational%20RabbitMQ/Untitled%208.png

    • Queue - ๋ฉ”์‹œ์ง€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ๋””์Šคํฌ์— ์ €์žฅํ–ˆ๋‹ค๊ฐ€ Consumer์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• 

    • Binding - Exchange์™€ Queue์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜

      Foundational%20RabbitMQ/Untitled%209.png

      • RabbitMQ๋Š” AMQP ์ŠคํŽ™์„ ํ™•์žฅํ•˜์—ฌ exchange-to-exchange biding์„ ์ง€์›ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ผ์šฐํŒ…์ด ๊ฐ€๋Šฅ