6/PPP

6/PPP

偏执海盗协议

偏执海盗协议 (PPP) 定义了一种在客户端(或客户端)与工作节点(worker peer)之间可靠的请求-应答对话。PPP 涵盖了在线状态检测、心跳机制以及请求-应答处理。它起源于《指南》的第四章。

许可证

版权所有 (c) 2011 iMatix Corporation。

本规范是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证条款对其进行再分发和/或修改;您可以选择该许可证的第 3 版,或任何更高版本。

发布本规范是希望它有用,但**不提供任何担保**;甚至不提供适销性或特定用途适用性的默示担保。更多详情请参阅 GNU 通用公共许可证。

您应该已随本程序收到一份 GNU 通用公共许可证的副本;如果没有,请参阅 https://gnu.ac.cn/licenses

变更流程

本规范是一个自由开放的标准(参阅“自由开放标准的定义”),并受数字标准组织 (Digital Standards Organization) 的共识导向规范系统 (Consensus-Oriented Specification System, COSS) 管辖(参阅“共识导向规范系统”)。

语言

本文档中的关键词“必须 (MUST)”、“不得 (MUST NOT)”、“要求 (REQUIRED)”、“应 (SHALL)”、“不应 (SHALL NOT)”、“应该 (SHOULD)”、“不应该 (SHOULD NOT)”、“推荐 (RECOMMENDED)”、“可以 (MAY)”和“可选 (OPTIONAL)”的解释方式与 RFC 2119 中所述一致(参阅“用于 RFC 中指示要求级别的关键词”)。

目标

PPP 实现了在客户端与工作节点(worker peer)之间可靠的请求-应答对话。PPP 涵盖了在线状态检测、心跳机制以及请求-应答处理。它起源于《指南》的第四章。

PPP 的目标包括:

  • 允许双方节点通过心跳机制检测对方的连接断开。
  • 允许客户端实现将任务分发给工作节点的“最近最少使用”模式。
  • 允许客户端通过将请求重新发送给其他工作节点来从死亡或断开连接的工作节点中恢复。

架构

Figure

角色

PPP 定义了两种节点类型:

  • “客户端”发出工作请求。每个请求都是一个消息,并被独立处理。

  • “工作节点”处理请求并用应答回应。每个请求产生一个应答。

整体对话流程

PPP 连接一个客户端和一个工作节点池。我们不指定哪些节点连接到哪些节点,但通常工作节点会连接到客户端。

客户端可以是一个中介(例如,一个队列设备),也可以是直接实现 PPP 的应用程序。

PPP 对话由以下两种交织的对话组成(‘C’ 代表客户端,‘W’ 代表工作节点):

    Synchronous dialog:             Asynchronous dialogs:
    ---------------------           ---------------------
    W: READY                        Repeat:
    Repeat:                             W: HEARTBEAT
        C: REQUEST                  Repeat:
        W: REPLY                        C: HEARTBEAT

分解来看:

  • 工作节点通过发送 READY 消息给客户端来启动对话。
  • 客户端以 REQUEST 消息回应。
  • 工作节点以 REPLY 消息应答,这无限重复。
  • 工作节点定期向客户端发送 HEARTBEAT 消息。
  • 客户端定期向工作节点发送 HEARTBEAT 消息。

任何对话中的第一个消息**必须**是 W:READY。

命令规范

: READY : 由一个包含单个字节 0x01 的 1 部分消息组成。
HEARTBEAT : 由一个包含单个字节 0x02 的 1 部分消息组成。
REQUEST : 由一个多部分消息组成,包含一个可选的带空终止符的地址堆栈,后接 1 个或多个部分的消息内容。
REPLY : 由一个多部分消息组成,包含一个可选的带空终止符的地址堆栈,后接 1 个或多个部分的消息内容。

心跳规范

节点**应该**以定期且约定的间隔发送心跳。如果在该间隔的若干倍时间(通常是 3-5 倍)内没有收到心跳,一个节点可以认为对方节点已“断开连接”。

如果工作节点检测到客户端已断开连接,它**必须**再次发送 READY 以开始新的对话。

如果客户端检测到工作节点已断开连接,它**应该**停止向其发送任何类型的消息。