Architecture 发布子模式的zmq与redis

Architecture 发布子模式的zmq与redis,architecture,redis,zeromq,publish-subscribe,design-consideration,Architecture,Redis,Zeromq,Publish Subscribe,Design Consideration,支持 也支持 在这两者之间进行选择的架构利弊是什么? 我的目标是超越应该进行的明显的特定于用例的性能基准测试的要点(如下所示) 假设使用诸如Python之类的高级语言。ZeroMq利弊 发布/订阅节点可以独立连接和断开连接;消息根据HWM设置保存到缓冲区,在对等可用时自动发送(存储和转发) 如果对等方失败,缓冲消息将丢失 主题订阅仅支持与发布/订阅信封匹配的前缀新闻订阅匹配新闻*消息 Redis的优点/缺点 在redis失败的情况下,AOF快照到磁盘会保留消息 发布/订阅客户端依赖redi

支持
也支持

在这两者之间进行选择的架构利弊是什么?
我的目标是超越应该进行的明显的特定于用例的性能基准测试的要点(如下所示)


假设使用诸如Python之类的高级语言。

ZeroMq利弊

  • 发布/订阅节点可以独立连接和断开连接;消息根据HWM设置保存到缓冲区,在对等可用时自动发送(存储和转发)
  • 如果对等方失败,缓冲消息将丢失
  • 主题订阅仅支持与发布/订阅信封匹配的前缀<代码>新闻订阅匹配<代码>新闻*消息
Redis的优点/缺点

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

    • 以下是我的决定。使用每个产品制作最少的测试用例。看看哪一个更容易构建,效果更好。将每个测试用例推远一点,然后丢弃一行,因为工作量太大。

      我使用python处理过ZeroMQ和Redis。我想说ZeroMQ更健壮,它提供了真正简单的负载平衡,而且比pub-sub更强大,比如请求-应答等。但如果你只关注酒吧酒吧,redis就简单多了

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

      两种服务都可以使用任何编程语言,Ruby、Python、C、C++等。 简而言之,redis非常简单,非常可靠。ZeroMQ非常可靠,但更复杂


      如果我只是做酒吧广告,我会选择redis,否则我会选择ZeroMQ。如果我想看到巨大的流量负载,我会选择ZeroMQ,因为我自己一直在研究这个问题,因为我需要决定是使用Redis pubsub还是ZMQ pubsub作为分布式系统的通信层。我认为Redis和ZMQ在应用程序的设置方面有所不同

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

    • 对于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
      
      • 如果您的应用程序位于订阅服务器端,其中有您想要从中获取信息的发布服务器守护程序,那么我会选择ZMQ,因为您可以直接连接到发布服务器
      • 如果您的应用程序位于发布服务器端,那么我将转到Redis pubsub,因为订阅服务器已经连接到Redis侦听
      嘿,如果所有的StackOverflow答案都像你提到的好例子那样是量身定制的、深入的,那就太好了:)但是它的方式让你的问题太开放了。也许你应该试着确定一些你正在苦恼的具体差异或取舍,然后用更具针对性的问题重新发布。但是感谢你的博客链接……这看起来是一篇很棒的文章。这是针对
      n-to-n
      pub/sub吗?@raffian-是的n-to-m用例。顺便说一下,除了N-M之外还有用例吗?你会使用Pub Sube作为ZrOMQ LGPL许可证吗?事实上,我是这样做的,但我宁愿咨询人群,我可能会发现只有在未来的道路上。。。最初的障碍可能会误导ZeroMQ如何处理服务器崩溃?不确定他们是如何处理的。但是,即使没有服务器运行,您也可以启动客户机并发布消息。启动服务器后,事情仍然会发生。我所知道的是,它工作得很好,非常有弹性和健壮,并且能够很好地处理崩溃,尽管在reasonIIRC中,它运行一个单独的线程/进程,将消息保存在该线程中。因此,您从未真正直接在套接字级别进行接口。消息和断开连接都可以在ZMQ线程中方便地异步处理,而您的应用程序正在执行它的工作?秒?毫秒?