写点什么

ØMQ(ZeroMQ) 简介

  • 2010-09-21
  • 本文字数:1981 字

    阅读完需:约 6 分钟

Ilya Grigorik,即 PostRank 的创始人兼 CTO,为 ZeroMQ 写了个简介如下

所有网络交互所使用的 API 实际上是 Berkeley 套接字 (BSD) 。这个源自 1980 年代早期的协议是 TCP/IP 协议的最原始实现。而且可以说,在当今各操作系统中,它是受到最广泛支持的 API,也是这些操作系统的核心组件之一。人们对 BSD 套接字的了解较多的是点对点的连接。点对点连接需要显式地建立连接、销毁连接、选择协议(TCP/UDP)和处理错误等。一旦你解决了以上所有问题,你就进入应用协议层(如 HTTP)的世界了,这里需要的是组帧、缓存和处理逻辑等。换言之,编写高性能网络协议的应用程序一点儿也不复杂。

他补充:

如果我们能对各种套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,这不是件很好的事情吗?这正是 ZeroMQ(ØMQ/ZMQ)网络库的由来:“它提供一些跨多种传输协议(如进程内通讯、IPC、TCP 和广播)的套接字供你使用。你可使用多种方式实现 N 对 N 的套接字连接,譬如:扇出、发布订阅、任务分发以及请求响应。”

ZeroMQ 网站解释:

ØMQ 是网络栈中新的一层,它是个可伸缩层,分散在分布式系统间。因此,它可支持任意大的应用程序。ØMQ 不是简单的点对点交互,相反,它定义了分布式系统的全局拓扑。ØMQ 应用程序没有锁,可并行运行。此外,它可在多个线程、内核和主机盒之间弹性伸缩。

ZeroMQ 是由社区推动的:

ØMQ(又称作 ZeroMQ 或 0MQ)是由数十位作者历时三年合作开发出来的自由软件

Ilya 解释:

  • ZeroMQ 交互是面向消息的。它将人们每天为应用程序周而复始地进行的例行消息处理封装起来。这意味着如果当客户端套接字发送一条 150KB 大小的消息时,服务端套接字无需显式处理任何缓存(buffer)或组帧,即能接接收到一条完整而相同的消息。
  • ZeroMQ 套接字与传输协议无关:对于任何协议,只有单一且统一的发送消息和接收消息 API。缺省情况下支持进程内通讯、IPC、广播和 TCP。此外,协议间切换非常简单,仅需更改连接字符串的前缀即可。
  • ZeroMQ 套接字能感知路由和网络拓扑。因为我们不再需要显示地管理点对点的连接状态——在上面我们已经看到,所有这些都已经由 ZeroMQ 库封装好——所以单个 ZeroMQ 套接字可以绑定两个独立的端口并监听他们的入站请求消息;也可使用一个 API 调用向两个独立的套接字发送数据。

Ilya 补充解释:

缺省情况下,ZeroMQ 中所有的交互都是异步的。这种异步处理模型使得 ZeroMQ 能够将建立连接、销毁连接、重新连接的过程封装起来,同时又能实现消息传输延迟的最小化:非阻塞的含义是,应用中一般的消息处理都是并行进行的,如消息的发送、传输以及(在发送端或接收端)排队。当然,你也可以控制 ZeroMQ 的排队行为,只需要设定内存范围即可,甚至你还可以为每个套接字设定交换区域。所以,如果需要的话,你完全可以模拟阻塞式 API,但是异步 I/O 是缺省的行为。

Mongrel2 是使用 ZeroMQ 的一个 Web 服务器。Ilya 解释:

Mongrel2 给出了将 ZeroMQ 应用于 Web 服务器的一个有趣的案例研究:所有入站消息通过“Push”套接字路由到 Mongrel2,套接字可以自动实现负载均衡,将消息分发到连接处理器。反过来,连接处理器处理入站消息(通过 Pull 套接字),然后将处理结果发布到一个“Pub”套接字,Mongrel2 服务器本身已订阅了该套接字,并且通过主题(topic)过滤器监听该套接字的进程号。

ZeroMQ 网站上给出了一个列表,简要给出了 ZeroMQ 较之其他传输机制的优势:

  • TCP:ZeroMQ 基于消息,消息模式,而非字节流。
  • XMPP:ZeroMQ 更简单、快速、更底层。Jabber 可建在ØMQ 之上。
  • AMQP:完成相同的工作,ZeroMQ 要快 100 倍,而且不需要代理(规范更简洁——少 278 页)
  • IPC:ZeroMQ 可以跨多个主机盒,而非单台机器。
  • CORBA:ZeroMQ 不会将复杂到恐怖的消息格式强加于你。
  • RPC:ZeroMQ 完全是异步的,你可以随时增加 / 删除参与者。
  • RFC 1149 :ZeroMQ 比它快多了!
  • 29west LBM:ZeroMQ 是自由软件!
  • IBM 低延迟:ZeroMQ 是自由软件!
  • Tibco:仍然是自由软件!

Ilya 总结:

无需多说,ZeroMQ 是一个雄心满满项目,该简介对于完整的特性集而言只能略见一斑。ZeroMQ 的明确目标是“成为标准网络协议栈的一部分,之后进入 Linux 内核”,现在还未看到它们的成功。但是,它无疑是极具前景的、并且是人们更加需要的“传统”BSD 套接字之上的一层封装。 ZeroMQ 让编写高性能网络应用程序极为简单和有趣。

Antonio Garrote 赞同 Ilya 的观点:

ZeroMQ 的确非常强大,除了快速和高效之外,它还大大简化了应用程序交互层的设计。此外,它还使得在多种场景下重用相同的交互模式成为可能。 然而,在我看来,ZeroMQ 应该被看作 RabbitMQ 之类的队列系统的补充,而不是替代品。与任何其他软件系统一样,仔细分析应用程序的需求就能让更加清楚哪种交互机制才是解决问题的最佳之选。

你在使用 ZeroMQ 吗?你如何看待它呢?


查看英文原文: An Introduction to ØMQ (ZeroMQ)

2010-09-21 10:5038164
用户头像

发布了 184 篇内容, 共 79.2 次阅读, 收获喜欢 8 次。

关注

评论

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

ShareSDK Uni-app 插件

MobTech袤博科技

uni-app ios android

Web3.0杂谈-#002(48/100)

hackstoic

Web3.0

数字化转型趋势|汽车电子软件开发工具链必看

laofo

DevOps cicd 研发效能 持续交付 DevOps工具链

如何根治 Script Error.

阿里巴巴终端技术

前端 终端 Script

一刀999?怎样让你的 iPhone 手游也拥有开挂般的体验

淋雨

imazing 存档 元气骑士

Chrome操作指南——入门篇(十)调试小技巧

Augus

Chrome开发者工具 9月月更

赛事升级,烽烟正燃!网易云信 Innovation 2022 开发者大赛等你参加!

网易智企

开发者大赛

中移链DDC-SDK技术对接全流程(三)

BSN研习社

计算机上的高性能计算,你了解多少?

Finovy Cloud

高性能计算

如何避免这10类常见故障?B站数据库架构设计做了这5步……|TakinTalks稳定性社区

TakinTalks稳定性社区

数据库治理 故障治理

异常场景测试

转转技术团队

测试方案 异常测试 用例设计

【云原生 | 从零开始学 Kubernetes】三、Kubernetes集群管理工具kubectl

泡泡

Docker 云计算 云原生 k8s 9月月更

好家伙!全网开源对标P5~P7程序员技术成长路线,阿里这次是真卷

程序员小毕

Java 程序员 面试 程序人生 架构师

ESP32-C3入门教程 基础篇(六、TIMG 硬件定时器 与 软件定时器)

矜辰所致

软件定时器 ESP32-C3 9月月更

客户说你的 SaaS 产品不好用怎么办?

产品海豚湾

产品经理 SaaS 客户关系管理 产品运营 9月月更

Linux内核详细笔记目录

简说Linux内核

嵌入式 Linux内核 驱动

如何使用禅道集成钉钉

禅道项目管理

钉钉 项目管理工具 禅道

ESP32-C3入门教程 基础篇(七、LEDC — LED PWM 控制器)

矜辰所致

pwm ESP32-C3 9月月更

【云原生 | 从零开始学Kubernetes】四、Kubernetes之YAML文件详解

泡泡

云计算 云原生 k8s 9月月更

JavaWeb核心之ServletConfig

楠羽

Servlet 笔记 9月月更

常用的注册中心以及他们的对比

想要飞的猪

zookeeper nacos Eureka

Spring事务管理

十八岁讨厌编程

Java 后端开发 9月月更

百亿市场遭「卡脖子」,国产工业软件兴起正当时

ToB行业头条

用多线程实现归并排序

聚变

归并排序 Lambda函数

前端必读2.0:如何在React 中使用SpreadJS导入和导出 Excel 文件

葡萄城技术团队

前端 Excel 框架

Spring事务角色与事务属性

十八岁讨厌编程

Java 后端开发 9月月更

FaissPQ索引简介

转转技术团队

深度学习 Faiss 向量计算

Databend 参加 PingCAP 用户峰会 2022

Databend

数据仓库 开源社区 云平台

Chrome操作指南——入门篇(八)breakpoint

Augus

Chrome开发者工具 9月月更

Chrome操作指南——入门篇(九)调试小技巧

Augus

Chrome开发者工具 9月月更

SpringMVC初识

十八岁讨厌编程

Java 后端开发 9月月更

ØMQ(ZeroMQ)简介_架构_Jean-Jacques Dubray_InfoQ精选文章