ZeroMQ是否已经达到生产级别?

33

你使用 ZeroMQ 作为通用消息中间件的经验如何?

  1. 你是否遇到了任何严重的错误或不明显的“特性”?例如,2.0 版本不能正确地刷新消息,而 故障排除指南 看起来给出了一个最可怕的解决方案:“在退出前睡眠1秒钟”。
  2. 这个 API 是否减少了应用程序的复杂性,还是证明它很麻烦?
  3. 向后兼容性是否经常会被打破?
3个回答

31

我正在用它进行研究,因此是“半生产”状态。这是一个很棒的框架,一旦你完全掌握了它的架构,事情的安排肯定是有道理的。但是我遇到了太多问题,以至于无法考虑将其用于生产。我正在使用jzmq,所以其中一些问题可能特定于它。

  1. 在OS X / Eclipse上设置jzmq...并不愉快。
  2. 有时启动应用程序会导致ZeroMQ C代码中的断言失败,因此我需要用某个东西包装我的应用程序以检查这种异常状态。
  3. 错误通常非常难以描述。我遇到了太多没有解释性消息的非法状态异常。
  4. 没有TLS支持。对我来说,这几乎是一个绝杀器,我可以轻松地看到它淘汰了许多应用程序的可用性。
  5. 文档有点“偏离”。官方指南很好,但如果你有一个具体的问题,它通常没有什么帮助。而且当我在Google周围搜索答案时,花费的时间比平时长。然而,邮件列表相当活跃。

但是,这是一个重要的优点,我无法计数它为我节省了多少人工时。这篇文章有一个很好的总结,列举了它使生活更加愉快的几种方式。


14

我在一个“半生产”环境中(DARPA的原型设计)也使用了ZeroMQ。到目前为止,特别是当这些程序被用不同语言编写且运行在不同机器上时,它对于“连接应用程序”非常有效。可用的套接字惯用语使得思考分布式计算问题变得非常直观。ZeroMQ的优势在于其人体工学:它有一个坚实的心智模型和丰富的语言绑定。

然而,如果您面临严格的性能限制,请小心谨慎。我正在开发一个实时系统,并发现虽然ZeroMQ旨在成为高性能解决方案,但它尚未准备好进入主流市场。我认为其现有架构具有很大的潜力;只是似乎受到一些小错误的妨碍。从0.0到3.0的库的演变如此迅速,我可能应该预料到这种情况。即使如此,我仍然认为我会获得自己手动构建的协议栈的替代品并立即遇到一些不能容忍的问题。如果您决定采用ZeroMQ,只需记住您正处于传输层之上,如果性能不理想,则几乎无能为力。

话虽如此,邮件列表和IRC频道上的聊天内容非常棒。开发人员似乎真正有兴趣构建一些完全先进的东西。他们喜欢他们的库受到关注并被用于严肃而有趣的事情。他们是忙碌的人,所以不要期望他们提供大量帮助。但是,如果您遇到了真正的问题,他们会很乐意了解情况。

底线:一个出色的瑞士军刀,可用于日常分布式计算问题。如果您正在寻找最新性能,请谨慎对待;至少还需要一个主要版本的发布。然而,这个项目的未来看起来很美好,因此使用它并支持它。


0
免责声明:这是来自一个从未使用过AMQP或任何类似产品的人的意见。
糟糕的文档就是糟糕。(如果没有.NET和C#的文档,C#将是糟糕的)因此,如果您知道如何使用它,ZMQ可能是最好的选择,但现有的文档(不多)相当糟糕(我们很聪明,这很好,Erlang,等等,在指南中没有单个n到n的示例...)。你会说那又怎样,大多数开源项目都有糟糕的文档或没有文档。是的,但对于相当多的开源项目,您可以在Google上找到大量的内容(教程、示例...)。对于ZMQ而言,零就是文档。由于我是一名C++开发人员,我会这样说。在尝试使用ZMQ之前,我认为Boost的文档很糟糕,在互联网上的示例相对较少。但与ZMQ相比,Boost的文档很棒,示例也很丰富。
编辑:为了让事情更有趣(内战:P):http://www.infoq.com/news/2012/03/Crossroads-IO Martin Sustrik和Martin Lucina是原始ZeroMQ的创建者,他们决定通过分叉来重新控制该项目。新项目名为Crossroads I/O,旨在建立一个商业生态系统,以更好地满足他们的长期财务需求。
编辑2:从指南中复制和运行示例(“A Request-Reply Broker”的cpp版本)无法工作。 你可以通过他们没有将示例作为测试来看出库开发过程有多好。:P 编辑3:其中一些示例位于v2.*中,最新版本当然是v3.2。因此,这再次让人想起了一个腐朽且未维护的操作系统项目。

1
但是ZeroMQ并不是用Erlang写的,那是RabbitMQ。 - Alex B
他们声称是像 Erlang 一样的 MT 代理框架...阅读他们的宣言 :D - NoSenseEtAl
1
http://crossroads.io已经停止维护,https://github.com/crossroads-io/libxs的最后一次提交是3年前。但至少它不像https://github.com/zeromq/libzmq那样是一个未维护的项目,而后者仅在...哦...等等...6天前更新。 - Nick T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接