コンテンツにスキップ

ZeroMQ 基本

軽量、クロスプラットフォームな非同期メッセージングライブラリです。

  • ZeroMQ
  • 基本ライブラリ
    • libzmq - ZeroMQ core engine in C++
  • C言語用
    • czmq - High-level binding for libzmq
  • C++用
    • zmqpp - High-level binding for libzmq
    • cppzmq - Header-only C++ binding for libzmq
    • azmq - Boost Asio style binding for libzmq
    • czmqpp - Minimal, simple wrapper for czmq
  • Python 用
    • Pyzmq - Python binding for libzmq
  • PHP (組み込み)

ソケットタイプ

参考) http://api.zeromq.org/2-1:zmq-socket

Type 方向 送信 受信
ZMQ_REQ T/R (交互) Round-robin Last peer
ZMQ_REP T/R (交互) Last peer Fair-queued
ZMQ_DELAER T/R Round-robin Fair-queued
ZMQ_ROUTER T/R ? Fair-queued
ZMQ_PUB T Fan-out -
ZMQ_SUB R - Fair-queued
ZMQ_PUSH T Round-robin -
ZMQ_PULL R - Fair-queued
ZMQ_PAIR T/R - -

可能な組み合わせ

  • REQ - REP (要求 - 応答)
  • DEALER - ROUTER
  • DEALER/ROUTER - REQ/REP
  • PUB - SUB (一方向の同時送信)
  • PUSH - PULL (一方向の分散送信)
  • PAIR - PAIR (一対一)

メッセージングパターン

参考) 0MQ The Guide Chapter 1 - Basics

Request-reply (双方向・交互)

  • REQ - REP
  • Server(REQ) と 1 つ以上の Client(REP)
  • Client は送信→受信、Server は受信→送信の順でおこなう必要がある。
  • Server からの送信は、直前に要求を送った Client に送られる。

Request-reply

Publish-Subscribe (片方向・ファンアウト)

  • PUB - SUB
  • Publisher(PUB) と 1 つ以上の Subscriber(SUB)
  • Publisher からの送信は、すべての Subscriber に送られる。
  • 各 Subscriber はフィルタリングして自分に必要なメッセージだけを受信できる。

Publish-Subscribe

Push-pull (片方向・ラウンドロビン)

  • PUSH - PULL
  • Sender(PUSH) と 1 つの Receiver(PULL)
  • Receiver は受信専用、Sender は送信専用。
  • Sender からの送信は、各 Receiver に順番に送られる。

Push-pull

Parallel Pipeline

Parallel Pipeline

Fair Queuing

  • PUSH - PULL
  • Receiver(PULL) と 1 つ以上の Sender(PUSH)
  • Receiver は受信専用、Sender は送信専用。

Fir Queuing

Reliable Request-Reply Patterns

参考) http://zguide.zeromq.org/page:chapter4#reliable-request-reply

The Lazy Pirate pattern: reliable request-reply from the client side

The Simple Pirate pattern: reliable request-reply using load balancing

The Paranoid Pirate pattern: reliable request-reply with heartbeating

The Majordomo pattern: service-oriented reliable queuing

The Titanic pattern: disk-based/disconnected reliable queuing

The Binary Star pattern: primary-backup server failover

The Freelance pattern: brokerless reliable request-reply