KZKY memo

自分用メモ.

Python: ZeroMQ

基本

メッセージパッシングフレームワーク or メッセージキューフレームワークの一種.
これらはOSSでいっぱいあり,メッセージブローカーがあるbrokerd, メッセージブローカーがいないbrokerlessに大まかに分類される.ZeroMQはbrokerlessに分類される.アーキテクチャとして,brokerdにすることも可能.

Middlewareというよりは,単なるのsocket abstraction libraryとして捉えたほうがいい.

何ができるか

で自分で保証して,という感じ.サンプルコード用意している.

Messaging Pattern

  • PUB and SUB
  • REQ and REP
  • REQ and ROUTER (take care, REQ inserts an extra null frame)
  • DEALER and REP (take care, REP assumes a null frame)
  • DEALER and ROUTER
  • DEALER and DEALER
  • ROUTER and ROUTER
  • PUSH and PULL
  • PAIR and PAIR

はできる.

XPUB, XSUB (pub, subのraw version)は参照するが,これら以外の組み合わせは,ドキュメンテーションしていないし,信頼できないと言っている.

各役割に関しては,これが詳しい.

Installation

OS: ubuntu14.04
Lang: Python

sudo pip install pyzmq

がはいると思う.

他人のGetting Started

自分でまとめるより,下記

がまずはとっつきやすい.

公式 Getting Started

http://zguide.zeromq.org/page:all#Chapter-Basicsにサンプルコードのリンクがたくさんあるので,Docを見ながら,コードみるのが良い.

Mycode Samples

以下の3パターンのサンプルが,ここ

REQ/RES: server/client (server-client blocking, a client can connect to many servers)

f:id:KZKY:20151215222612p:plain

PUB/SUB: broadcast (non reliable publish)

f:id:KZKY:20151215222613p:plain

PUSH/PULL: loadbalancing

f:id:KZKY:20151215222614p:plain

気をつける点

  • network周りのI/Oはbackground threadで行われる,mesageはinput queueに入って,output queueから出て行く
  • 基本は1 threadだけど,増やすことも可能. contextに対して増やす操作をする
  • 1秒あたり,1 GBのin or out dataあたり,1 threadを目安に考える
  • socket.bind()が何回も可能.ただし同じアドレス:ポートの組み合わせはだめ
  • 同じsocketをmultithread間で使わない
  • 1thread or 1proceessで複数socketsを扱う場合はpollを使う