ZeroMQ的几种模式和使用场景

ZeroMQ也看了几天了,感觉这个库就是为我而生的,一直很讨厌封装底层socket,这个库的出现,对于通信的基础工作减轻了很多。ZeroMQ一共有以下几种模式:

  • PUB - SUB
  • REQ - REP
  • REQ - ROUTER
  • DEALER - REP
  • DEALER - ROUTER
  • DEALER - DEALER
  • ROUTER - ROUTER
  • PUSH - PULL
  • PAIR - PAIR

接下来我会按照我的理解逐个进行介绍,同时每种模式给一个实际工作中的例子。

push/pull模式

ZeroMQ的几种模式和使用场景

该模式最少由三个进程或现成组成,最上面是任务生成端,例如游戏服务器或者前端服务器,获取到需要密集计算或从不同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从指定的一个读中获取信息。