写点什么

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

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

关注

评论

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

kubebuilder实战之三:基础知识速览,mybatis运行原理步骤

Java 程序员 后端

Java面试经,nginx解决跨域原理

Java 程序员 后端

架构 3 期模块二作业:下微信朋友圈的高性能复杂度

渐行渐远

架构实战营

模块二作业

小朱

架构实战营

java面试题,mybatis原理和实现机制

Java 程序员 后端

JUnit5学习之一:基本操作,菜鸟教程java在线编辑器下载

Java 程序员 后端

Kubernetes 常用命令大全,震撼来袭免费下载

Java 程序员 后端

Java面试题超详细整理《Spring篇》,Tencent后台开发Java岗二面

Java 程序员 后端

模块二作业

小鹿

Java高级特性之 IO流(1),三面蚂蚁金服(交叉面)定级阿里P6

Java 程序员 后端

架构实战营 毕业总结

脉醉

Kotlin之DSL,java面试写代码

Java 程序员 后端

JUnit5学习之三:Assertions类,java微服务架构训练营

Java 程序员 后端

JDK的前世今生:细数 Java5 - 15 的那些经典特性

Java 程序员 后端

Jedis入门教程,java入门课程百度网盘

Java 程序员 后端

JVM内存溢出分析:堆内存溢出+虚拟机,BTAJ大厂最新面试题汇集

Java 程序员 后端

Kafka性能调优实战:同等资源配置性能提升20几倍的秘诀

Java 程序员 后端

架构设计流程

天天向上

架构实战营

Java面试题超详细整理《多线程篇》,mongodb教程导入外部数据

Java 程序员 后端

JVM篇:对象的深度剖析,mybatis入门程序

Java 程序员 后端

Kafka-on-Pulsar 的前世今生,新秀 Pulsar 到底好在哪?

Java 程序员 后端

Java高级特性之 IO流,java面试题高级

Java 程序员 后端

Kubernetes任务调用Job与CronJob及源码分析(1)

Java 程序员 后端

Java面试屡碰壁,一气之下狂刷高分宝典,一月之后拿到字节offer

Java 程序员 后端

【架构训练营】毕业设计

zclau

JMM - Java 内存模型,java读写锁源码分析

Java 程序员 后端

JVM总体概述,java高级开发面试经验

Java 程序员 后端

Java面试被MySQL问哭了,面试官一个连环炮提问,我一个都讲不清

Java 程序员 后端

Java高手是怎样炼成的?阿里P8技术大牛这份手写笔记告诉你答案!

Java 程序员 后端

【架构训练营】毕业总结

zclau

架构营模块二作业

GTiger

架构实战营

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