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 (組み込み)
  • ZMQ

ソケットタイプ

参考) 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

Lazy Pirate pattern

リプライがない場合にクライアントサイドでリトライをおこなう方式。

  • Pros) 実装がシンプルで分かりやすい。
  • Pros) 既存のクライアント・サーバーコードで動作する。
  • Pros) 接続のリトライは ZeroMQ によりおこなわれる。
  • Cons) バックアップへのフェイルオーバーはできない。

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

Simple Pirate pattern

  • Cons) 中央のキューが SPOF になる。

The Paranoid Pirate pattern: reliable request-reply with heartbeating

Simple Pirate pattern

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