zeromq实践

Parallel Pipeline PUSH-PULL推拉模型 分而治之

Server端作为Push端,而Client端作为Pull端,纵然有三个Client端同时连接到Server端,则Server端会在里面做三个载荷均衡,选用平均分配的算法,将享有音信均衡公布到Client端上。与公布订阅模型对照,推拉模型在尚未消费者的场馆下,发表的新闻不会被消耗掉;在顾客力量不够的动静下,可以提供多消费者互动消费化解方案。

选拔场景:该模型首要用以多职务并行。
图片 1

ZeroMQ特点

ZeroMQ是三个传输层API库,
更关注新闻的传输。与信息队列比较,ZeroMQ有以下部分特性:

1 点对点无中间节点.

历史观的音讯队列都须要二个音信服务器来储存转载消息。而ZeroMQ则屏弃了这一个格局,把重心放在了点对点的消息传输上。

ZeroMQ能缓存音信,可是是在出殡和埋葬端缓存。ZeroMQ里有水位设置的相干接口来控制缓存量。当然,ZeroMQ也帮忙古板的新闻队列(通过zmq_device来实现)。

2 强调音信收发方式

在点对点的新闻传输上ZeroMQ将通讯的情势做了汇总,比如大规模的订阅格局(二个音讯发五个客户),分发格局(N个消息平均分给X个客户)等等。上边是当下支撑的音信格局配对,任何一方都得以做为服务端。

  • 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 and XSUB是PUB and SUB的弱版本。

Pub-Sub Network with a Proxy 请求-应答代理

二种方式来三番五次多少个客户端和两个服务端。

  • 第2种是让客户端通过负载均衡与多个服务端进行延续。
    图片 2
  • 其次种是请求-应答代理会将四个套接字分别绑定到前者和后端,供客户端和劳务端套接字连接。代理装置必须借使非阻塞式的。那种方法灵活性更好。
    图片 3

The State Flow状态流

图片 4

The Naming Ceremony

图片 5

阿拉伯联合共合国酋格局和同伙方式

图片 6

zmq_curve(7)

secure authentication and confidentiality安全的表明方法和保密措施

The CURVE mechanism defines a mechanism for secure authentication and
confidentiality for communications between a client and a server. CURVE
is intended for use on public networks. The CURVE mechanism is defined
by this document:
http://rfc.zeromq.org/spec:25.公网使用

zmq_plain(7)

clear-text authentication明文认证 Authentication Using SASL

The PLAIN mechanism defines a simple username/password mechanism that
lets a server authenticate a client. PLAIN makes no attempt at security
or confidentiality. It is intended for use on internal networks where
security requirements are low. The PLAIN mechanism is defined by this
document:
http://rfc.zeromq.org/spec:24.内网使用,安全性低

安装

运用时,注意将防火墙端口关闭。

4种为主信息形式

ZeroMQ将新闻通讯分成4种模型,分别是一对一结对模型(Exclusive-Pair
)、请求应对模型(Request-Reply)、发布订阅模型(Publish-Subscribe)、推拉模型(Push-Pull)

Publish-Subscribe发表订阅模型

揭露端单向分发数据,且不关心是不是把全部新闻发送给订阅端。假设发布端早首发表新闻时,订阅端尚未连接上去,则那几个音信会被直接放任。订阅端未连接导致信息丢失的难题,能够透过与请求应对模型组合来化解。订阅端只负责接收,而不可能申报,且在订阅端消费速度慢于表露端的意况下,会在订阅端堆积数据。

运用场景:该模型主要用以数据分发。天气预告、新浪歌手观者可以选择那种经典模型。
图片 7

注意事项:在此种方式在,SUB端在确立连接后,供给先订阅,才能收到音信,不然接收不到音信。示例如下:

ZMQ.Context context = ZMQ.context(1);
Socket subscriber = context.socket(ZMQ.SUB);
subscriber.connect("tcp://localhost:5557");
subscriber.subscribe("".getBytes());
int total = 0;
while (true) {
    byte[] bytes = subscriber.recv(0);
}

Subscribe按不一样的topic主题过滤

//Publish端发送不同的topic主题
publisher.sendMore("access_point");
publisher.send(ipAddress.toByteArray(), ZMQ.NOBLOCK);

//topic filter过滤:根据topic过滤,不同的Subscribe订阅不同的数据    
subscriber.subscribe("access_point".getBytes());
while (true) {
    //接收topic
    byte[] bytesTopic  = subscriber.recv(0);
    // 接收数据
    byte[] bytesData = subscriber.recv(0);
}

iothread设置

When you create a new context, it starts with one I/O thread. The
general rule of thumb is to allow one I/O thread per gigabyte of data in
or out per second.

ZMQ.Context context = ZMQ.context(1); //1是iothread

Number of threads to use, usually 1 is sufficient for most use cases.
public static Context context(int ioThreads) {
        return new Context(ioThreads);
}

pair :The Relay Race

信号形式迟早是一定的,那种格局能够替代信号量和互斥锁,用于协调线程。

图片 8

与socket对比

ZeroMQ提供了就好像于Socket的一三种接口,他跟Socket的分别是:普通的socket是端到端的(1:1的涉及),而ZMQ却是能够N:M
的关联,人们对BSD套接字的问询较多的是点对点的总是,点对点总是供给显式地确立连接、销毁连接、选用情商(TCP/UDP)和处理错误等,而ZMQ屏蔽了这么些细节,让您的互联网编制程序更为简易。ZMQ用于node与node间的通讯,node能够是主机也许是经过。

The Request-Reply Mechanisms 高级请求-应答形式

ZeroMQ进阶

Request-Reply请求应对模型

由请求端发起呼吁,然后等待回应端应答。贰个呼吁必须相应1个应答,从呼吁端的角度来看是发-收配对,从答应端的角度是收-发对。跟一对一结伴模型的分别在于请求端能够是1~N个。

选用场景:该模型首要用以远程调用及义务分配等。Echo服务正是那种经典模型的行使。
图片 9

参考文献


tips:本文属于本身读书和执行进度的记录,很多图和文字都粘贴自网上文章,没有申明引用请见谅!如有任何难点请留言或邮件文告,小编会立马还原。

在CentOS下使用ZeroMQ

centos 安装 zeromq jzmq

#install zeromq
tar -xzf zeromq-2.1.7.tar.gz
cd zeromq-2.1.7
#./configure --prefix=/usr/local/zeromq  #按照此种方式,会报错,搞不定。
./configure
yum -y install libuuid-devel ##如果报错uuid-dev,安装此程序
make & make install

#install jzmq
(yum -y install libtool)
git clone https://github.com/nathanmarz/jzmq.git
cd jzmq
./autogen.sh
./configure 
make & make install

测试

/ddhome/usr/jzmq/perf
sh local_lat.sh tcp://127.0.0.1:5000 1 100
    如果报以下错误:
    Exception in thread "main" java.lang.UnsatisfiedLinkError: no jzmq in java.library.path
            at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
            at java.lang.Runtime.loadLibrary0(Runtime.java:823)
            at java.lang.System.loadLibrary(System.java:1028)
            at org.zeromq.ZMQ.<clinit>(ZMQ.java:34)
            at local_lat.main(local_lat.java:36)
    解决方案:(不是必选项)
    vi ~/.bashrc 
    export LD_LIBRARY_PATH=/usr/local/lib

报错:错误: 找不到或无法加载主类 remote_lat。这是因为未执行./configure

sh remote_lat.sh tcp://127.0.0.1:5000 1 100

#出现下面信息,则测试成功
message size: 1 [B]            #####说明测试成功
roundtrip count: 100
mean latency: 140.0 [us]

在Windows10下使用ZeroMQ

笔者只利用zeromq client接收数据,故未做编写翻译安装,参考
ZeroMQ(Java)使用民用小心得,那里马克一下(适用于windows64bit及32bit),下载已编写翻译好的公文。

业已编译好的文本,一般是几个:jzmq.dll,libzmq.dll,zmq.jar文件(这么些maven中有)

多少个dll文件放在jdk放置目录:%JAVA_HOME%/bin/.dll

<dependency>
    <groupId>org.zeromq</groupId>
    <artifactId>jzmq</artifactId>
    <version>2.2.0</version>
</dependency>

即可在idea中运转java代码编写的zeromq.


zeromq简介

图片 10

zeroMQ不是TCP,不是socket,也不是消息队列,而是这几个的综合体。

ZeroMQ以嵌入式互连网编程库的方式完成了叁个相互开发框架(concurrency
framework),
可见提供经过内(inproc)、进程间(IPC)、互连网(TCP)和播音形式的新闻信道,
并协助扇出(fan-out)、宣布-订阅(pub-sub)、义务分发(task
distribution)、请求/响应(request-reply)等通讯格局。

ZeroMQ的异步I/O模型能够为多核音讯系统提供丰盛的增加性。

ZeroMQ援救30多种语言的API,能够用来绝大部分操作系统。

康宁表明

相关文章