zmq vs redis for pub-sub pattern

时间:2013-09-03 12:10:27

标签: architecture redis zeromq publish-subscribe design-consideration

redis支持pub-sub
zmq也支持pub-sub via a message broker

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

假设使用Python等高级语言。

4 个答案:

答案 0 :(得分:20)

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

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

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

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

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

答案 1 :(得分:11)

ZeroMq优点/缺点

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

Redis优点/缺点

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

答案 2 :(得分:6)

我自己一直在研究这个问题,因为我需要决定是将Redis pubsub还是ZMQ pubsub用于分布式系统的通信层。我认为Redis和ZMQ在应用程序设置方面存在差异。

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

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

  3. 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
    
    • 如果您的应用程序位于订阅方,并且您希望从中获取信息的发布者守护程序,那么我会选择ZMQ,因为您可以直接连接到发布者。
    • 如果您的应用程序位于发布者端,那么我会去Redis pubsub,因为订阅者已经连接到Redis监听。

答案 3 :(得分:2)

以下是我的决定方式。使用每种产品制作最少的测试用例。看看哪个更容易构建并且更好地工作。将每个测试用例推得更远,然后丢弃一行作为太多工作。