[ํ’€์Šคํƒ] Application Layer messaging protocol

2023. 4. 17. 04:18ใ†ComputerScience/FullStackProgramming

 

 

 

Kernel vs Application

  • ๊ณผ๊ฑฐ - ์ „ํ†ต์ ์ธ ์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ์€ ์šด์˜์ฒด์ œ ๋‚ด๋ถ€ ์ปค๋„์— ์œ„์น˜
  • ํ˜„๋Œ€ - ์šด์˜์ฒด์ œ ์ƒ์œ„์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์œผ๋กœ ์ฃผ๋กœ ์ œ๊ณต

 

์œ„์น˜์— ๋”ฐ๋ฅธ ์žฅ๋‹จ์ ?

  • ์„ฑ๋Šฅ (datarate, memory) ์ธก๋ฉด
    • ์ปค๋„์˜ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์„ฑ๋Šฅ๋„ ๋†’๊ณ , ๊ฒ€์ฆ๋œ ์ฝ”๋“œ
  • ๊ฐœ๋ฐœ ๋ฐ ๋ฐœ์ „ ์šฉ์ด์„ฑ (dev & user community) ์ธก๋ฉด
    • ์ปค๋„์— ์ฝ”๋“œ ๋„ฃ์œผ๋ ค๋ฉด, OS ํšŒ์‚ฌ์— ๋ถ€ํƒํ–ˆ๋‹ค
    • ๋‚ด๊ฐ€ ์งœ์„œ ๋‚ด๊ฐ€ ์“ธ๊ฒŒ, ํ•„์š”ํ•œ ์‚ฌ๋žŒ์—๊ฒŒ ๊ณต๊ฐœํ• ๊ฑฐ์•ผ
    • ๊ฒฐ๊ตญ ์ด ์šฉ์ดํ•จ์— ๋ฐฉ์ ์ด ์ฐํ˜”๋‹ค. 

 

2010๋…„๋ถ€ํ„ฐ ๋„คํŠธ์›Œํฌ ๊ธฐ์ˆ ์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์ด ๋“œ๋Ÿฌ๋‚˜๊ธฐ ์‹œ์ž‘
๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ 1~4 layer ์ ‘๊ทผ -> OS ๋‚ด๋ถ€์˜ ์ฝ”๋“œ๋ฅผ ๋ถˆ๋Ÿฌ ์‚ฌ์šฉํ–ˆ๋‹ค
์šด์˜์ฒด์ œ ๋‚ด๋ถ€์˜ ์†Œ์Šค ์ฝ”๋“œ, ์ปค๋„ ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ๋ฉด 
-> MS, ๋ฆฌ๋ˆ…์Šค ํŒŒ์šด๋ฐ์ด์…˜ ํ—ˆ๊ฐ€

๊ทธ๋ƒฅ ์‘์šฉ(application) ๊ณ„์ธต์—์„œ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์„ ์งœ์ž!
๋ฆฌ๋ˆ…์Šค ์ปค๋„๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ, OS์™€ ๋…๋ฆฝ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ž
์ปค๋„ ๋‚ด๋ถ€์— ์กด์žฌ X -? ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ level
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— STL๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

 

 

 

์ „ํ†ต์ ์ธ ์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ

  • Socket API์€ Kernel๊ณผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ณ ๋ฆฌ
  • Linux๋‚˜ Unix๋ฅผ ํฌํ•จํ•œ POSIX ๊ณ„์—ด ์šด์˜์ฒด์ œ๋Š” ์†Œ์ผ“์„ file descriptor๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋…ธ์ถœํ•จ
  • read / write ์ˆ˜์ค€์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋งŒ ๊ฐ€๋Šฅ -> ๋ชจ๋‘ ํŒŒ์ผ์ฒ˜๋Ÿผ ์ทจ๊ธ‰
  • POSIX ๊ณ„์—ด์˜ ์šด์˜์ฒด์ œ์—์„œ ์†Œ์ผ“์€ ํŒŒ์ผ์˜ ํ•œ ์ข…๋ฅ˜์ž„
  • ํŒŒ์ผ ๊ณ„์ธต์€ ๋‹จ์ˆœํ•œ ๊ฒ€์‚ฌ๋งŒ ํ•˜๊ณ , ํŒŒ์ผ ๊ตฌ์กฐ์ฒด์— ์—ฐ๊ฒฐ๋œ ์†Œ์ผ“ ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์†Œ์ผ“ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•จ

 

 

 

https://zeromq.org

 

 

 

ZeroMQ (ØMQ, 0MQ, or zmq)

  •  Application Layer Messaging Library
  • ์ปดํ“จํ„ฐ ๊ฐ„ ์ •๋ณด ์ฃผ๊ณ  ๋ฐ›๊ธฐ & ์ปดํ“จํ„ฐ ๋‚ด ์ •๋ณด ์ฃผ๊ณ ๋ฐ›๊ธฐ (๋ฉ”๋ชจ๋ฆฌ ํ†ต์‹ , ํ”„๋กœ๋ ˆ์Šค ๊ฐ„ ์ •๋ณด ๊ตํ™˜) ๋ชจ๋‘ ๊ฐ€๋Šฅ 
  • ๋Œ€๋ถ€๋ถ„์˜ ์šด์˜์ฒด์ œ์— ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํฌํŒ… 

 

  • 1:1 ํ†ต์‹  ์ฝ”๋“œ๋ฅผ ํ•ญ์ƒ ๊ฐœ๋ฐœ์ž๋“ค์ด N:M์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๋‹ค
  • ์ด๋ฅผ ์ œ๋Œ€๋กœ ํ•˜๋‚˜ ๋งŒ๋“ค์ž -> ์ด๊ฒƒ์œผ๋กœ ์‹œ์ž‘๋œ ZMQ
  • N:M ํ”„๋กœ๊ทธ๋ž˜๋ฐ -> ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ 

 

  • zmq pattern
  • ๋ณธ์ธ์—๊ฒŒ ๋งž๋Š” ๊ทธ๋ฆผ์„ ์„ ํƒ
  • 1:1 ๋ฐ‘๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์˜ฌ๋ผ์˜ค๋Š” ์ฝ”๋“œ๋Š” ์•ˆ์งœ๋„ ๋œ๋‹ค
  • ์ฒ˜์Œ๋ถ€ํ„ฐ N:M์„ ์ง€์› 
    send() -> ์•Œ์•„์„œ subscriber์—๊ฒŒ ํ•œ๋ฒˆ์— ๋ฉ”์„ธ์ง€๋ฅผ ๋‹ค ๋ณด๋‚ธ๋‹ค
    ์ผ์ผ์ด ๋‚ด๊ฐ€ ์นด์šดํŒ…ํ•˜๊ณ , ๊ธฐ๋กํ•˜๊ณ , ๋ณต์‚ฌํ•˜๋Š” ํ–‰์œ„๋ฅผ ๋ชจ๋‘ ์ง€์›€
  • 1:1๋ถ€ํ„ฐ N:m, fan-in, fan-out ๋„ ๋ชจ๋‘ ์ง€์›
    fan in/out ์‹น ๋ชจ์•„์„œ ์ฃผ๋Š” ๊ฒƒ : divide and conquer
    ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ๋œ ์ •๋ณด๋ฅผ ํ•˜๋‚˜๋กœ ๋ชจ์œผ๋Š” ๊ฒƒ

 

 

 

Zero Message Queue์˜ ํŠน์ง•

  • ZERO means: 
    zero broker (brokerless)
    and zero latency, zero cost (it’s free), zero administration
  • ์ค‘์•™ ํ†ต์ œํ•˜๋Š” ๋ธŒ๋กœ์ปค ์—†์ด, ์ •๋ณด ๋ณด๋‚ผ ์• ๊ฐ€ ๋ฐ›์„ ์• ํ•œํ…Œ ์ง์ ‘ ๋ณด๋‚ด๋ฉด ๋จ
    TCP ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹๊ณผ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค. 
    cf) ์ค‘์•™ ์„œ๋ฒ„๊ฐ€ ์žˆ์–ด์„œ DM ๋ฐœ์†ก 
    -> ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ์„œ๋ฒ„๊ฐ€, ๋‚˜๋ฅผ ๋Œ€์‹ ํ•ด์„œ ๋ณด๋‚ด์คŒ (๋ธŒ๋กœ์ปค 0 -> ๋ž˜๋น—) 
  • High performance asynchronous messaging library
  • Aimed at use in distributed or concurrent applications
    ์ค‘์•™ ์—†์œผ๋‹ˆ ๊ฐ์ž ์•Œ์•„์„œ ํ•˜๋ฉด ๋จ, ํŒจํ„ด์œผ๋กœ ๋ณด๋ฉด ๋ถ„์‚ฐ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ ์ด๋ฏธ ๊ตฌํ˜„๋จ
  • No dedicated message broker 
  • Resemble Berkeley socket API
    ์ตœ๋Œ€ํ•œ ๋ฒ„ํด๋ฆฌ ๋ฒ„์ „ TCP ๋ชจ์‚ฌํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•จ
  • Supports messaging patterns: request/reply, publish/ subscriber, and others
  • Run over a variety of transports: TCP/UDP, in-process, inter-process, multicast, web socket and more
  • Guide for 60+ diagrams and 750 examples (@2021.07)