ZeroMQ的几种模式和使用场景
ZeroMQ也看了几天了,感觉这个库就是为我而生的,一直很讨厌封装底层socket,这个库的出现,对于通信的基础工作减轻了很多。ZeroMQ一共有以下几种模式:
- PUB - SUB
- REQ - REP
- REQ - ROUTER
- DEALER - REP
- DEALER - ROUTER
- DEALER - DEALER
- ROUTER - ROUTER
- PUSH - PULL
- PAIR - PAIR
接下来我会按照我的理解逐个进行介绍,同时每种模式给一个实际工作中的例子。
push/pull模式
该模式最少由三个进程或现成组成,最上面是任务生成端,例如游戏服务器或者前端服务器,获取到需要密集计算或从不同io设备获取数据的任务。
中间三个worker用来具体干活,可以无限扩展。每个worker收到数据处理后发给Sink。
vent和worker都是连接的sink,数据的流动是从vert到sink,sink再转发给worker,worker处理后还给sink。
vent====>sink====>worker====>sink,但是第一步的vent到sink是不可见的,因此我们应用只需要关注sink收到的,由worker处理后的数据。
有一点需要注意的是,sink给worker发布任务是采用的轮训分配,也就是说每个worker获得的任务量是一样的,即使其中一个worker处理很慢,也不能少获得任务。因此这个模式主要用于worker工作量差不多大小的任务。例如从读写分离的集群redis中获取数据,每个worker从指定的一个读中获取信息。