产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

Ø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:5038174
用户头像

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

关注

评论

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

带你了解代理模式

Java 程序员 后端

干掉GuavaCache:Caffeine才是本地缓存的王

Java 程序员 后端

实战:第十一篇:StringRedisTemplate获取redis信息

Java 程序员 后端

实战spring自定义属性(schema)

Java 程序员 后端

Kubernetes 给容器化部署和管理带来的好处

后台技术汇

Kubernetes 11月日更

已开源!阿里巴巴SpringCloud微服务原理与架构项目实战,请签收

Java 程序员 后端

年初入职 字节跳动 的Java面试经验分享(文档)

Java 程序员 后端

应届生想要找到一份Java开发的工作,需要达到什么水平?

Java 程序员 后端

模块三作业

小鹿

将CSV的数据发送到kafka(java版)

Java 程序员 后端

实现一个百万级推送服务,除了它,还有谁

Java 程序员 后端

将项目转成MAVEN项目

Java 程序员 后端

幸亏有了这本623页的微服务框架实战笔记,一举拿下腾讯美团滴滴offer

Java 程序员 后端

开发做了一两年了,感觉遇到了瓶颈,公司已经学不到太多东西,如何成长为技术大牛

Java 程序员 后端

Android C++系列:JNI 调用时缓存字段和方法 ID

轻口味

c++ android jni 11月日更

宝藏图,引起的一堆问题,轻量级锁的不解(Synchronized锁的升级)

Java 程序员 后端

常见的社会潜规则有哪些?

Java 程序员 后端

应云而生,幽灵的威胁 - 云原生应用交付与运维的思考

Java 程序员 后端

官宣:恭喜 ChaosBlade 项目进入 CNCF Sandbox

Java 程序员 后端

完美!腾讯技术官发布Java零基础就业宝典,不用再怀疑人生了

Java 程序员 后端

实时数据库 架构图

Java 程序员 后端

工作三年的Java程序员应该达到什么水平?

Java 程序员 后端

年前三面美团百度挂了,疫情间啃完阿里面试宝典,成功斩获offer

Java 程序员 后端

安卓程序员必备hook技术之进阶篇

Java 程序员 后端

架构实战营 - 第三期 - 模块三作业

岚哲

极客时间 架构 架构实战营

架构实战营 - 第三期 - 模块三作业

lucian

架构实战营

.NET6新东西--Http Logging

喵叔

11月日更

常见的SQL面试题:经典50例

Java 程序员 后端

干货第一弹-教你如何利用阿里开源工具进行排查线上CPU居高问题

Java 程序员 后端

应用服务器集群的Session管理

Java 程序员 后端

官方都不推荐?为什么MySQL不推荐使用uuid作为主键?究竟有什么坏处

Java 程序员 后端

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