报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

为什么 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:1628869
用户头像

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

关注

评论

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

​太厉害了,终于有人把Spring条件注解讲明白了,送你上岸!

飞飞JAva

spring

【得物技术】网络优化——域名解析原理&实践

得物技术

网络 域名解析 域名 得物技术 实践

CloudQuery v1.3.7版本更新,新增「导出限制」

BinTools图尔兹

数据库 sql 数据安全 数据库管理

让电影票房飞一会儿,五一换个姿势重温经典

华为云开发者联盟

音视频 电影修复 视频超分 媒体处理 混合失真

云原生除了K8S、微服务,还有...?

云计算

群英荟萃 | UINO优锘科技ThingJS平台亮相华为开发者大会

ThingJS数字孪生引擎

物联网 3D可视化 数字孪生

参加人气创作者的一些感悟

石云升

28天写作 4月日更 1 周年盛典

弱密码会毁灭物联网(IoT)吗?

龙归科技

密码管理

软件 IT专业的高校大学生是否写文调查问卷

Bob

问卷调查 行业分析能力考核 高校大学生 写文

已跪!Java全能笔记爆火,Java教程/Java包/Eclipse安装指南全有

牛哄哄的java大师

Java

流水线成功涨薪到年薪30W 只有努力才能成功

学Java关注我

Java 架构 程序人生 编程语言

SpringCloud-技术专题-Feign组件基本使用(1)

码界西柚

Configuration Hystrix spring-cloud Fegin Ribbon

2.8W字Java基础学习和书籍推荐,真正意义上的从0到1学Java,才不是培训机构那种大纲文

北游学Java

面向对象 线程 集合 java基础 IO流

云图说|ModelArts Pro,为企业级AI应用打造的专业开发套件

华为云开发者联盟

AI 企业应用 ModelArts Pro 开发套件

聪明人的训练(三十)

Changing Lin

4月日更

5月日更,InfoQ 高定T-恤,达标来领~

InfoQ写作社区官方

5月日更 热门活动

引入:从云计算到Serverless

刘宇

阿里码农肝了2晚,整理的Java语法总结,网友:考试复习全靠它了

飞飞JAva

带你温习一下webpack配置

IT皮皮蟹

npm nodejs webpack

我与写作平台的初次接触

Aldeo

1 周年盛典 我和写作平台的故事

飞桨中国行落地合肥,与当地企业共话产业智能化升级

百度大脑

智能化 飞桨中国行

科技赋能 博睿数据引领教育行业走入“服务可达”时代

博睿数据

在线教育 博睿数据 服务可达

音频变速变调原理及soundtouch代码分析

floer rivor

音视频

极光开发者周刊【No.0430】

极光JIGUANG

Serverless的定义

刘宇

Boss直聘转发超100W次Java面试突击手册 火遍全网

比伯

Java 编程 程序员 架构 计算机

新人小白福利来啦!精简版java知识总结,阿里P8大牛看完都说绝了

牛哄哄的java大师

Java

博睿数据DataView标准化指标管理,助力企业快速制定SLO

博睿数据

数据中台 博睿数据 dataview

yarn的applicationMaster介绍

五分钟学大数据

YARN

什么,你管这叫“线程安全”?

Java大蜗牛

Java 程序员 编程语言 后端 线程安全

又一个免费良心的下载站,答应我:别再下到流氓软件了。

彭宏豪95

ios 效率 工具 下载 4月日更

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