49/SCATTERGATHER
ZeroMQ 分散-聚集
- 状态: 草案
- 编辑: Doron Somech somdoron@gmail.com
本文档规定了 ZeroMQ 分散-聚集模式的语义,该模式涵盖了 SCATTER 和 GATHER 套接字类型。本规范旨在指导这些套接字类型的实现,以便用户能够依赖可靠的语义。
前言
版权所有 (c) 2020 Doron Somech
本规范是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证(版本 3 或您选择的任何更高版本)的条款重新分发和/或修改它。分发本规范是希望它有用,但不提供任何担保;甚至不包括适销性或特定用途适用性的默示担保。详情请参阅 GNU 通用公共许可证。您应该已随程序收到一份 GNU 通用公共许可证的副本;如果未收到,请参阅 https://gnu.ac.cn/licenses。
本规范是一项自由开放标准,并受数字标准组织 共识导向规范系统 的管辖。
本文档中的关键词“MUST”(必须)、“MUST NOT”(禁止)、“REQUIRED”(必需)、“SHALL”(应)、“SHALL NOT”(不应)、“SHOULD”(应该)、“SHOULD NOT”(不应该)、“RECOMMENDED”(推荐)、“MAY”(可以)和“OPTIONAL”(可选)应按照 RFC 2119 中的描述进行解释。
目标
本规范旨在正式记录 SCATTER 和 GATHER 套接字类型的名称和预期行为,它们共同构成了 ZeroMQ 分散-聚集模式。符合此规范的这些套接字的实现 SHOULD(应该)遵守本规范,从而确保应用程序可以依赖可预测的行为。本规范不特定于传输方式,但并非所有行为都能在所有传输方式上重现。
此模式的总体目标
分散-聚集模式是线程安全套接字新系列中的一员。分散-聚集模式是管道模式的线程安全替代方案。
此模式旨在用于任务分发,通常在一个多阶段管道中,其中一个或几个节点将工作推送到许多工作节点,而工作节点又将结果推送到一个或几个收集节点。该模式在很大程度上是可靠的,除非节点意外断开连接,否则它不会丢弃消息。它是可伸缩的,因为节点可以随时加入。
为了使 API 成为线程安全的,发送和接收消息 MUST(必须)是原子的,并且通过一个 API 调用来接收或发送完整消息。因此,分散-聚集模式(以及线程安全系列中的其他模式)MUST NOT(禁止)允许多部分消息。
SCATTER 套接字类型
SCATTER 套接字类型与一组匿名的 GATHER 对等方通信,使用轮询算法发送消息。
一般行为
- MAY(可以)连接到任意数量的 GATHER 对等方,并且 SHALL(应)只发送消息。
- SHALL NOT(不应)以任何方式过滤或修改传出消息。
- SHALL(应)为每个已连接的对等方维护一个传出消息队列。
- 在启动与对等方的传出连接时 SHALL(应)创建此队列,并且无论连接是否建立 SHALL(应)维护该队列。
- 当对等方连接到它时 SHALL(应)创建此队列。如果此对等方断开连接,SCATTER 套接字 SHALL(应)销毁其队列并 SHALL(应)丢弃其中包含的任何消息。
- SHOULD(应该)将队列大小限制在运行时可配置的范围内。
- MUST(必须)是线程安全的,并允许从多个线程发送。
处理传出消息
- SHALL(应)仅在对等方的传出队列未满时才将其视为可用。
- SHALL(应)使用轮询策略将传出消息路由到可用对等方。
- 在没有可用对等方时 SHALL(应)阻塞发送,或返回适当的错误。
- 在没有可用对等方时 SHALL NOT(不应)接受进一步的消息。
- SHALL NOT(不应)丢弃无法入队的消息。
- MUST NOT(禁止)发送多部分消息。
GATHER 套接字类型
GATHER 套接字类型与一组匿名的 SCATTER 对等方通信,使用公平队列算法接收消息。
一般行为
- MAY(可以)连接到任意数量的 SCATTER 对等方,并且 SHALL(应)只接收消息。
- SHALL NOT(不应)以任何方式过滤或修改传入消息。
- SHALL(应)为每个已连接的对等方维护一个传入队列。
- 在启动与对等方的传出连接时 SHALL(应)创建此队列,并且无论连接是否建立 SHALL(应)维护该队列。
- 当对等方连接到它时 SHALL(应)创建此队列。如果此对等方断开连接,GATHER 套接字 SHALL(应)销毁其队列并 SHALL(应)丢弃其中包含的任何消息。
- SHOULD(应该)将传入队列大小限制在运行时可配置的范围内。
- MUST(必须)是线程安全的,并允许从多个线程接收。
处理传入消息
- SHALL(应)使用公平队列策略从其对等方接收传入消息。
- SHALL(应)将这些消息传递给调用应用程序。
- MUST(必须)丢弃多部分消息的任何部分,MAY(可以)断开发送多部分消息的对等方。
安全方面
本规范不涉及安全方面。