zmq vs redis for pub-sub pattern

Jon*_*han 25 architecture publish-subscribe zeromq design-consideration redis

redis支持pub-sub
zmq通过消息代理支持pub-sub

在他们之间进行选择的建筑专业人士是什么?
我的目标是超出应该完成的明显的用例特定性能基准测试(这是一个很好的例子).

假设使用Python等高级语言.

Tra*_*hor 21

我使用python与ZeroMQ和Redis一起工作.我会说ZeroMQ更强大,它提供真正简单的负载平衡,也比pub-sub更多,比如请求回复.但是如果你只是在pub-sub之后,redis就会简单得多.

如果redis服务器崩溃或停止工作,所有客户端也将停止工作,使用ZeroMQ,即使没有服务器,客户端也能工作.

这两种服务都可以使用任何编程语言,ruby,python,C,C++等.

简而言之,redis更简单,更可靠.ZeroMQ非常可靠但更复杂.

如果我只做pub sub,我会选择redis,否则我会选择ZeroMQ.如果我想要大量的流量,我会选择ZeroMQ

  • 那么 ZeroMQ 如何处理服务器崩溃呢? (2认同)
  • 不知道他们怎么做。但是,即使没有服务器在运行,您也可以启动客户端并发布消息。您启动服务器,一切仍然会发生。我所知道的是,尽管工作在合理的范围内,但它的工作原理非常出色,并且非常有弹性和鲁棒性,并且可以很好地处理崩溃问题 (2认同)

raf*_*ian 11

ZeroMq优点/缺点

  • 发布/发布对等体可以独立连接和断开; 消息根据HWM设置保存到缓冲区,根据对等可用性自动发送(存储转发)
  • 如果对等体失败,则缓冲的消息将丢失
  • 主题订阅仅支持与pub/sub包围的前缀匹配; NEWS订阅匹配NEWS*消息

Redis优点/缺点

  • 在redis失败的情况下,AOF快照到磁盘会保留消息
  • 发布/订阅客户端依靠redis进行连接
  • news.*支持选择性主题订阅的通配符匹配


eal*_*eon 6

我一直在研究这个问题,因为我需要决定是否使用Redis pubsub或ZMQ pubsub作为分布式系统的通信层.我认为Redis和ZMQ在应用程序设置方面有所不同.

  1. ZMQ pubsub天生直接连接,即没有中间人.
    您可以创建像转发器设备这样的中间人实例

  2. 对于Redis pubsub,订阅者和发布者都需要连接到Redis.

ZMQ缺乏中间人意味着订户需要以某种方式知道连接到发布者以获取消息.在我的系统中,应用程序产生需要向订阅者发送信息的发布者,如果没有订阅者在我的应用程序启动之前连接到的转发器设备,就无法做到这一点.

延迟在我的系统中很重要,因为我希望远程盒子尽可能快地做事.

Zmq (direct pubsub)
avg: 0.000235867897669
max: 0.0337719917297
min: 0.000141143798828

Zmq (w/ forwarder)
Avg: 0.00237249334653
max: 0.00536799430847
min: 0.000249862670898

Redis (8gb ram)
avg: 0.000687216520309
max: 0.0483138561249
min: 0.000313997268677

Redis (32gb ram)
avg: 0.000272458394368
max: 0.00277805328369
min: 0.000216960906982
Run Code Online (Sandbox Code Playgroud)
  • 如果您的应用程序位于订阅方,并且您希望从中获取信息的发布者守护程序,那么我会选择ZMQ,因为您可以直接连接到发布者.
  • 如果您的应用程序位于发布者端,那么我会去Redis pubsub,因为订阅者已经连接到Redis监听.