“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

为什么 ZeroMQ 不应该成为你的第一选择

  • 2014-08-12
  • 本文字数:1314 字

    阅读完需:约 4 分钟

Tyler Treat 是一名软件开发人员,他近日发表了一篇博文《为什么ZeroMQ 不应该成为你的第一选择》。

文中,Tyler Treat 对 nanomsg 和 ZeroMQ 进行了比较。nanomsg 是一个套接字库,提供了多种常见的通信协议,其目标是使网络层更快、更具扩展性、更容易使用。它用 C 进行了彻底地重写,可以说是对 ZeroMQ 的重建。它构建在 ZeroMQ 的可靠性能之上,同时又提供了若干重要的改进。而且,它还试图消除 ZeroMQ 经常出现一些怪异行为。作者从以下几个方面对二者进行了比较:

  • 用于新传输协议的 API——对于 ZeroMQ,人们经常抱怨的问题是它没有提供用于新传输协议的 API,这从根本上把用户限制在 TCP、PGM、IPC 和 ITC 上。而 nanomsg 提供了一个可插拔的接口,用于新的传输(如 WebSockets)和消息协议。
  • POSIX 兼容性——nanomsg 完全兼容 POSIX,而且 API 更简洁,兼容性更好。在 ZeroMQ 中,套接字用空指针表示,然后绑定到上下文;而在 nanomsg 中,只需要初始化一个新的套接字并使用它,一步即可完成。
  • 线程安全——ZeroMQ 在架构上有一个根本性缺陷:其套接字不是线程安全的。在 ZeroMQ 中,每个对象都被隔离在自己的线程中,因此不需要信号量和互斥锁。并发是通过消息传递实现的。nanomsg 消除了对象与线程间的一对一关系,它不再依赖于消息传递,而是将交互建模为一组状态机。因此,nanomsg 套接字是线程安全的。
  • 内存和 CPU 使用效率——ZeroMQ 使用一种很简单的 Trie 结构存储和匹配发布 / 订阅服务。当订阅数超过 10000 时,该结构很快就显现出不合理之处了。nanomsg 则使用一种称为“基数树(radix tree)”的结构来存储订阅,并提供了真正的零复制 API,允许内存从一台机器复制到另一台机器,而且完全不需要 CPU 的参与,这极大地提高了性能。
  • 负载均衡算法——ZeroMQ 采用了轮转调度算法。虽然该算法可以平均分配工作,但也有其局限性。比如,有两个数据中心,一个在伦敦,一个在纽约。在理想情况下,一个位于伦敦数据中心的网站,其请求不应该路由到纽约。但在ZeroMQ 的负载均衡算法里,这完全有可能。而 nanomsg 避免了这种情况的出现。

除此之外,文中还提到,nanomsg 提供了一个名为 nanocat 的命令行工具,用于与系统进行交互。

作者继续写道,nanomsg 旨在实现“可扩展协议(Scalability Protocols)”,用于构建可扩展的高性能分布式系统。当前,它定义了六种不同的可扩展协议:PAIR、REQREP、PIPELINE、BUS、PUBSUB 和 SURVEY。

既然 nanomsg 在 ZeroMQ 的基础上做了如此多的改进,那我们为什么还要用 ZeroMQ 呢?针对这个疑问,作者指出,nanomsg 还相对年轻,它还没有达到 ZeroMQ 的成熟度,没有像 ZeroMQ 那样有一个繁荣的开发者社区。另外,ZeroMQ 有丰富的文档及其它资源,可以帮助开发人员使用它,而 nanomsg 的文档非常少。

尽管如此,作者还是认为 nanomsg 所做的改进,尤其是它的可扩展协议,使它非常有吸引力。从技术上讲,从三月份开始,nanomsg 就已经开始 beta 测试,因此,生产就绪版本已经指日可待。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-08-12 09:1627309
用户头像

发布了 256 篇内容, 共 81.1 次阅读, 收获喜欢 11 次。

关注

评论

发布
暂无评论
发现更多内容

最近很火的京东、天猫超市飞天茅台抢购是怎么回事,从原理流程给你们分析一波

谙忆

读书笔记:《激荡三十年》上

lidaobing

28天写作 激荡三十年

想做出好决定,让头脑来次时空旅行吧!

Justin

思维模型 决策 28天写作

2021年,这是以太坊的发展方向?

李忠良

28天写作

Soul网关实践 01|把项目跑起来

哼干嘛

Java 探索与实践 API网关 Soul网关

重学JS | Class

梁龙先森

大前端 编程语言 28天写作

28天瞎写的第二百一八天:搬机房的故事

树上

28天写作

建立与孩子沟通的桥梁-从一个家庭会议开始

Ian哥

28天写作

解决div里面img图片下方有空白的问题

德育处主任

CSS html html5 大前端 28天写作

Spring Boot如何动态修改日志级别

万里无云

Spring Boot actuator 日志级别

Spring Boot 集成 Swagger2 展现在线接口文档

武哥聊编程

Java springboot SpringBoot 2 swagger 28天写作

同事试用期没过就被劝退,我比他还难受

熊斌

职场 成长笔记 28天写作 职场新人

京东RPA:以企业数字化转型为驱动的机器人流程自动化解决方案专家

京东科技开发者

RPA 企业信息化 数字化运维

精选算法面试-数组II

李孟聊AI

面试 算法 数组 28天写作

MySQL查询——连接查询

程序员的时光

程序员 28天写作

日语复习Day01【~あげく(に)】

IT蜗壳-Tango

程序员 七日更 日语语法 情景句型

Flutter技术在会展云中大显身手

京东科技开发者

小程序flutter, 跨平台 云服务 移动开发

杂谈

.

28天写作

视频号第一周总结 | 视频号 28 天 (08)

赵新龙

28天写作

大数据知识专栏 - MapReduce入门

小马哥

Java 大数据 hadoop mapreduce 七日更

聚焦目标,团队工作不再一盘散沙(中)

一笑

管理 敏捷 目标管理 目标追踪 28天写作

乐观主义

三只猫

28天写作

HDFS SHELL 详解(8)

罗小龙

hadoop 28天写作 hdfs shell

古有诸葛亮八卦阵阻敌,今有iptables护网安

华为云开发者联盟

安全 防火墙 网络 iptables 数据包

面试官:你说一下对Java中的volatile的理解吧

Java 编程 面试 多线程

自动驾驶和疫苗的相似之处——浅谈自动驾驶基本架构(28天写作 Day7/28)

mtfelix

自动驾驶 28天写作

LeetCode题解:105. 从前序与中序遍历序列构造二叉树,递归+使用索引,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

贸易战的本质是什么?

JiangX

经济 28天写作 制造 美国 贸易战

幻想着,直到大厦崩塌「幻想短篇 7/28」

道伟

28天写作

关心群众生活,注意工作方法 Jan 15, 2021

王泰

28天写作

第十三周课后练习

晴空万里

架构师训练营第2期

为什么ZeroMQ不应该成为你的第一选择_语言 & 开发_马德奎_InfoQ精选文章