MessageQueue 관련 질문(RabbitMQ, ZeroMQ...)

dhko96의 이미지

안녕하세요.

ZeroMQ나 RabbitMQ, ActiveMQ와 같은 messaging Queue 시스템과 관련된 질문을 드립니다.
사실 이런것들을 왜 사용해야 하는지 잘 이해가 안되어 질문을 드립니다.

이런 시스템들은 TCP보다 빠르다라고 설명하고 있는데..
도대체 어떻게 이런게 가능한것일까요?
결국엔 내부적으로 TCP/IP socket 통신으로 프로세서 간에 데이터 교환을 하는것인데..
데이터를 socket buffer에 write/read 하는 로직을 최적화 하여 일반적으로 만드는 TCP/IP socket 프로그램으로 데이터 전송하는것보다 빠르다는것인지...개념이 이해가 되지 않습니다...

그리고 inner process간에 MQ를 사용할경우 굳이 MQ를 이용해야 할필요가 있는것인지..
Thread1:[response -> queue insert -> reply] -> Thread2:[dequeue -> work]
특정 response의 처리시 reply를 빠르게 하고 실제 작업을 별도의 풀로 관리하여 처리 하기 위하여 MQ를 사용하는데 굳이 이런 MQ를 쓸 필요가 있는것인지 모르겠습니다. 그냥 std:queue를 사용 해도 되는것이 아닐런지...
만약 redis와 같은 분산 memory cache를 queue로 활용하겠다고 하면 dequee 하는 대상이 물리적으로 다른 머신이 되어 부하 분산의 효과가 있겠지만...단일 시스템내에서 처리 하는것에 대하여 굳이 MQ과 같은 것들을 이용하면 어떤 장점이 있는것일까요?

답변 부탁드립니다.

익명 사용자의 이미지

비교 자체가 틀린 이야기죠.

MQ는 미들웨어이고, TCP는 위의 MQ들이 사용하는 프로토콜인걸요.

ZeroMQ가 더 빠르다고 하는 사람은 "페라리가 자동차보다 빠르다"고 하는 소리나 다를바가 없습니다.
둘은 비교가 가능한 성질이 아니죠.

MQ 미들웨어를 쓰는 목적은 어려운 TCP/IP 소켓 프로그래밍을 좀 더 쉽게 하기 위함입니다. 어설프게 소켓 프로그래밍을 하면 문제가 많기 때문에 MQ를 쓰는 것이지요

프로세스간 통신은 IPC 영역이므로 굳이 MQ 제품을 사용할 필요는 없습니다.(사용해도 되긴 하지만 오버헤드죠)

그리고 IPC 기법의 Message Queue와 미들웨어 MQ는 서로 다른 것입니다.

dhko96의 이미지

RabbitMQ, zeroMQ를 미들웨어로 봐야 하나요?
ipc간의 영역의 통신방식을 지원하는 libary라고 생각을 했는데..
사용하는 예를 보면 미들 웨어가 아니고 꼭 socket libary처럼 보여서 서버쪽 구현하고, 클라이언트쪽 구현해야하는 것 같아 보이거등요....별도의Middle ware는 아닌 queue libary로 생각을 했거등요..

흠..점점 헥갈리는군요..

아르아의 이미지

1. std:queue는 thread-safe하지 않습니다.
2. RabbitMQ, ActiveMQ는 AMQP를 구현한 녀석들이라서 ZeroMQ와는 많이 다릅니다. ZeroMQ는 그보다는 로우레벨의 일을 수행합니다.
3. ZeroMQ는 TCP뿐만이 아니라 IPC도 지원합니다.
4. ZeroMQ가 TCP를 이용해도 TCP보다 더 빠르다고들 하는데요, 이건 내가 C++로 작성한 Vector클래스보다 std::vector가 더 빠르다는 정도의 이야기로 생각하면 될것 같습니다.

익명 사용자의 이미지

ZeroMQ는 클러스터링/슈퍼컴퓨팅 환경에서 빠르다고 하더군요.

그 외에 특히 자바, python에서는 사용도 쉽고 성능도 좋습니다.

하지만 본질적으로 TCP는 프로토콜의 일종이라서 비교할 대상이 다르다고 생각합니다.
ZeroMQ측이 자극적인 문구를 사용해서 이목을 끌려고 하는게 아닐까 생각됩니다.
TCP는 규약이지 운영체제별로 구현된 스택을 이야기 하는 것은 아니니까요.

개인적으로 zeromq의 이목끌기 식의 자극적 문구는 오해의 소지가 있다고 생각합니다

익명 사용자의 이미지

속도가 문제가 아니라.. 안정성이 문제라서 MQ를 쓰는거겠죠..
Transaction system을 구축하려면 commit 기반의 공유 메모리 공간이 필요한데, 그게 DB일수도 있고 MQ일수도 있습니다.
DB에 비하면 MQ가 가볍겠죠.. 로깅도 되고.. 뭐 그런 관점에서 보셔야 할듯....

익명 사용자의 이미지

찾아보니 ZeroMQ는 많이 다르네요.. ZeroMQ는 MQ라기 보다는.. IPC library같은 느낌이네요..

익명 사용자의 이미지


예를 들어 '1024 byte 패킷 10만개를 전송한다고 했을때, 직접 tcp 소켓 통신을 구현한것보다 zeroMQ를 사용하면 더 빠르다' 정도는 이야기할 수 있을것 같습니다.

packet segmentation나 nagle algorithm등에 있어서 좀더 최적화를 시키지 않았을까 해요

사실 패킷 하나를 보내는데 직접 짠것보다는 느리지 않을까요

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.