ZeroMQ学習(1)<抜粋>オープンソースソフトウェアアーキテクチャ-ZeroMQ

1 ZeroMQの概要

ZeroMQは、マルチスレッドネットワークメッセージキューライブラリ基づいて、複数のトランスポートプロトコルを横切るそのソケット型接続処理フレーム、基礎となるルーティングのも抽象的詳細は、ソケットを提供します。ZeroMQネットワーク通信は、アプリケーション層とスケーラブルレイヤである、(TCP / IPの分割に応じて)輸送層との間に、システムの分散に分散、並行して実行することができる、新たな層です。

2システムアーキテクチャ

2.1全体的なアーキテクチャ

ZeroMQは、ほとんどすべてのI / O操作は非同期で、メインスレッドがブロックされていません。I / Oスレッドの対応する番号を作成するときにユーザzmq_init機能インタフェースパラメータ、ZeroMQは、着信コールに基づい。各I / Oは、スレッドオペレーティング・システム・プラットフォームに応じて異なるネットワークI / Oモデル(選択し、ポーリング、ファイルディスクリプタ、devpoll、kequeue等)を用いてポーラー、ポーラー炉古典パターン実装、ポーラーと結合しました。メインスレッドおよびI / Oスレッドがメールボックスのメッセージを渡すことによって通信します。クライアントまたはサーバーが接続を開始するために聞いて、あるいはメインスレッドでzmq_connecter zmq_listenerを作成する起動すると、メールボックスのメッセージは、I / Oスレッドにバインドされますの形で、I / Oスレッドはポーラーに追加するzmq_connecterまたはzmq_listenerます読み取り/書き込みイベントをリスニング。最初の通信時のサーバーとクライアントは、認定されたために、アイデンティティを送信するためにzmq_initを作成します。双方は、セッションを介して通信するために後に認定した後、双方は、この接続のためのセッションを作成します。セッションは、メインスレッドのメッセージのみパイプ/書き込みデータから読み出され、各読み出し/書き込みパイプラインのそれぞれに関連付けられます。セッションは、実際には、カーネルとI / Oデータを交換するが、セッションエンジンのプラグインを経由してカーネルにI / Oデータを交換することではありません。

 

 

2.3メッセージモデル

4つのモデルにZeroMQメッセージトラフィック、各モデルは、一接合部(排他的対)、要求応答モデル(要求 - 応答)、パブリッシュ・サブスクライブモデル(パブリッシュ・サブスクライブ)、プッシュプルモデル(プッシュプル)です。実際に、一般的なネットワーク通信モデルの4つのモデルのこの概要は、アプリケーション、独自のソリューションを形成するために2つの以上のモデルの組み合わせに応じて必要とされ得ます。

2.3.1 1ペアモデル

         最も単純な1:1メッセージングモデルは、TCPコネクションと考えることができますが、TCPサーバーは接続のみを受け入れることができます。データを双方向に流れることができ、要求応答は、後に、このモデルは異なっています。

2.3.2要求応答モデル

要求を開始要求することで、その後、応答終了の応答を待ちます。作られるビューの要求者のポイントからの応答を求める要求に対応しなければならない - 送信権 - 受信端応答の観点から、対を受け取ります。モデルの違いを有するものは、要求ノードが1〜Nであってもよいということです。このモデルは、主に長距離通話およびタスク割り当てのために使用されています。エコーサービスは、この古典的なモデルを応用したものです。

図3の要求応答モデル

2.3.3パブリッシュ・サブスクライブ・モデルは、

         データの一方向の分布の終わりを投稿、およびサブスクリプションの端にすべての情報を送信するかどうかを気にしません。出版側が情報を公開し始めた場合は、既に接続されていない、情報が破棄されます終わるためにサブスクライブします。情報損失の問題に未接続のリードを終了するに購読、あなたが解決するための応答モデルポートフォリオを要求することができます。受信するための唯一の責任ケースを終了するに購読ではなく、フィードバック、そして遅く出版側よりも最終消費者のサブスクリプションでは、サブスクリプションが終了でデータを蓄積します。データ配信のためのモデル。天気予報では、スターのファンのマイクロブログは、この古典的なモデルを適用することができます。

図4は、モデルをパブリッシュおよびサブスクライブ

2.3.4プッシュモデル

エンドとしてプッシュ、プルとクライアント側としてサーバー側エンド、クライアント - サーバ側への複数の同時接続がある場合、あなたは均等に分散アルゴリズムを使用して、社内のバランスサーバー側の負荷をやる、すべてのメッセージは、Client-バランスに投稿上。パブリッシュ・サブスクライブ・モデルと比較して、消費者の不在下でモデルをスライド、発表は消費されない、消費者の不十分な能力の場合、消費者は、複数の並列コンシューマ・ソリューションを提供することができます。このモデルは、主にマルチタスクのために使用されています。

5プッシュモデル

2.4通信プロトコル

提供进程内、进程间、机器间、广播等四种通信协议。通信协议配置简单,用类似于URL形式的字符串指定即可,格式分别为inproc://、ipc://、tcp://、pgm://。ZeroMQ会自动根据指定的字符串解析出协议、地址、端口号等信息。

3  工作流程

图6 基本流

4 ZMQ交互对象

序列图有助于理解对象状态变迁,下图描述的是客户端的对象状态变迁。zmq_socket以ZMQ_REQ模式实例化,用以进行tcp通信:

void *requester = zmq_socket (context, ZMQ_REQ);
zmq_connect (requester, "tcp://localhost:5555");

 

5 ZMQ 类层次

①、object_t,主要用于发送命令和处理命令,所有继承object_t的子类都具备该类的功能

②、io_thread_t,内含一个poller,可监听句柄的读、写、异常状态,继承自object_t,具有接收命令、处理命令、发送命令的功能

③、io_object_t,可以获取一个io_thread_t的poller,从而具备poller功能,所有继承自该类的子类都具有pollere功能,可监听句柄的读、写、异常状态

④、reaper_t,zmq的回收线程

⑤、own_t,zmq的对象树结点,或者说多叉树的结点,其主要用于对象的销毁,可以想到,对象的销毁就是这棵树的销毁过程,必须要使用深度优先的算法来销毁。关于zmq对象树在Internal Architecture of libzmq有详细讲解

⑥、tcp_connector_t,zmq_socket的连接器,使用她来建立tcp连接

⑦、tcp_listener_t,zmq_socket的监听器

⑧、stream_engine,负责处理io事件中的一种----网络事件,把网络字节流转换成zeromq的msg_t消息传递给session_base_t。另外一些和版本兼容相关的杂务也stream_engine处理的。stream_engine_t处理完杂务,到session_base_t就只看见msg_t了。

⑨、session_base_t,管理zmq_socket的连接和通信,主要与engine进行交换

⑩、socket_base_t,zeromq的socket,在zmq中,被当成一种特殊的”线程“,具有收发命令的功能

 

参考资料

ØMQ(ZeroMQ)简介 

ØMQ - The Guide 

ZeroMQ 的模式

Internal Architecture of libzmq

ZeroMQ的内部架构

http://www.aosabook.org/en/zeromq.html

<摘录>开源软件架构-ZeroMQ

libzmq master

おすすめ

転載: www.cnblogs.com/mysky007/p/12287115.html