《HarmonyOS:领航者说》技术公开课来啦,大咖分享、实战解码,不容错过 了解详情
写点什么

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

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

关注

评论

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

【Golang runtime学习笔记-启动过程分析】

卓丁

初始化 runtime 汇编 Go 语言

终于有人把 java代理 讲清楚了,万字详解!

root

Java jdk 后端 动态代理 cglib

golang-pprof实战笔记

卓丁

pprof 性能分析 Go 语言

一款跨平台免费的开源 SQL 编辑器和数据库管理器!

JackTian

数据库 sql GitHub 开源 实用工具

软件设计原则

yupi

架构师训练营 - 第 2 周命题作业

红了哟

架构师第二周学习总结

陈靓-哲露

优化工程师逻辑视角下的微信“拍一拍”功能

Earth_Polarbear

人工智能 微信 系统工程 优化逻辑

ArrayList哪种循环效率更好你真的清楚吗

root

Java 后端 ArrayList 循环效率 方式

大话设计模式 | 3. SOLID原则

Puran

设计模式

程序员的晚餐 | 6 月 20 日 随便牛肉和翡翠白玉

清远

美食

Java操作Excel竟如此简单

生命在于折腾

Java EasyExcel

[安利] 可能会让你爱上书写的工具组合!

猴哥一一 cium

Typora markdown markdown编辑器 玩转写作平台

区块链系列教程之:比特币的钱包与交易

程序那些事

比特币 区块链 智能合约 钱包 交易

由一次管理后台定时推送功能引发的对 RabbitMQ 延迟队列的思考 (二)

LSJ

Java RabbitMQ 延迟队列 优先级队列

如何做好职场印象管理?

石云升

职场 印象管理 职场形象

在项目中随手把haseMap改成了currenHaseMap差点被公司给开除了

root

Java 后端 BigDecimal金额 Arrays.asList

从拼多多突破阿里和京东两大巨头绞杀,市值破千亿美金来看职业价值链

非著名程序员

程序员 程序人生 职业规划 职业成长

实现一个redis命令--nonzerodecr

老胡爱分享

redis 源码分析 源码阅读

LeetCode | 4. Palindrome Number 回文数

Puran

Python C# 算法 LeetCode

Kafka面试题:基础27问,必须都会的呀!

Java小咖秀

大数据 kafka 分布式 队列 延时消息

游戏夜读 | RPG的美式和日式

game1night

啥是CPU缓存?又如何提高缓存命中率呢?

八两

架构师训练营第三周学习总结

张明森

架构师训练营 - 第2周学习总结

红了哟

SpringIOC 是依赖倒置吗?

yupi

架构师训练营第二周作业

陈靓-哲露

策略模式解析

Seven七哥

设计模式 策略模式

[架构师训练营] 2 依赖倒置

悬浮

Git 基础知识学习

LeoBing

效率思维模式与Zombie Scrum

易成研发中心

敏捷开发

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