跳到主要内容

Sparkplug-B 接入

许多工业和楼宇自动化设备群已经通过自行运维的 MQTT 消息代理,以 Eclipse Sparkplug B 格式发布遥测数据。DeviceChain 可以直接从这些网络接入数据,无需设备做任何改动。它作为**主机应用(Host Application)**加入 Sparkplug 环境,将边缘流量转换成与其他传输产生的相同事件。

对于普通 MQTT,DeviceChain 本身就是消息代理。Sparkplug 接入则相反:DeviceChain 作为客户端向你的消息代理建立出站连接,订阅配置的 Sparkplug 分组,并遵循 Sparkplug 会话协议。

提供的功能​

  • 声明自身为主机应用。 DeviceChain 发布 Sparkplug STATE 消息,让边缘节点知道消费者已在线。它遵循上线/离线握手,因此始终知道哪些节点和设备处于在线状态。

  • 跟踪 Sparkplug 会话。 Sparkplug 是有状态协议。边缘节点先发送 BIRTH 消息,定义指标及紧凑别名,随后发送引用这些定义的 DATA 消息流,离线时发送 DEATH。DeviceChain 运行完整会话状态机,跟踪每个节点的别名和消息序列,并检测序列缺口或遗漏的上线消息。需要重新同步时,它要求节点重新声明(rebirth),因此丢失消息不会静默破坏解码结果。

  • 将边缘身份映射到设备。 每个 Sparkplug {group}/{node}(或节点下设备的 {group}/{node}/{device})成为 DeviceChain 设备的 externalId。如果为来源启用自动注册,首次发现时会自动创建设备。否则,未知身份会被丢弃并计数,让你控制哪些对象进入注册表。租户删除后、数据回收期间,其流量也会被丢弃,并单独计数。因此,观察丢弃计数的运维人员可以区分“未在注册表中”和“租户已删除”。

  • 产生明确的在线状态。 节点或设备 BIRTH 立即、明确地将对应设备标记为在线,DEATH 则标记为离线。因此 Sparkplug 与 LwM2M 一样,是主动声明在线状态的传输:Sparkplug 设备的在线状态由协议明确确定,而不是根据超时推断。参见离线处理,了解 DeviceChain 会应用哪些离线消息。

  • 进入相同流水线。 解码后的测量与在线状态变更进入普通的解码 → 解析 → 持久化流水线。所有下游功能——历史记录、实时状态、仪表板和检测引擎——都像处理其他遥测数据一样处理 Sparkplug 数据。包含超过 256 个指标值的消息会拆分成多个连续事件,每个最多 256 个值。每个值保留自己的时间戳;重新投递消息会产生相同事件,而不是重复记录。

离线处理​

DeviceChain 有意严格限制哪些离线消息会生效:

  • 上线序列必须匹配。 节点的 BIRTH 声明了上线序列号时(Sparkplug 规范要求这样做),只有携带匹配序列号的 DEATH 才会被接受。早期连接遗留的过期或重复遗嘱会被忽略,不会终止已经被更新 BIRTH 重建的会话。
  • 没有上线序列,就无法关联。 BIRTH 没有声明上线序列号的节点无法关联,其离线消息会原样接受。
  • 未上线的设备。 从未上线的设备收到设备 DEATH 时,不会产生任何事件,因为没有需要结束的在线状态。
  • 节点离线会级联。 节点离线会将节点及其所有已知子设备标记为离线,因为 Sparkplug 中节点离线意味着其设备也随之离线。

租户与配置​

每个 Sparkplug 来源配置给一个租户,保存消息代理 URL、凭据(通过投射密钥提供,绝不放在明文配置中)和订阅分组。

来源收到的每条消息都归属于该来源的租户。租户由消息进入的消息代理决定,绝不从 Sparkplug 主题读取,因此一个租户的边缘网络不会被误认为另一个租户的网络。

高可用性​

同一时间,只有一个 Sparkplug 服务副本连接给定消息代理。Sparkplug 主机持有每个节点的别名、序列和会话状态,因此两个连接实例会分别看到部分流量,并发布冲突的 STATE。单一所有权是正确性要求,而非调优选项。平台通过带隔离保护的所有权租约执行该要求,部署也拒绝渲染多个副本。

租约使替换安全且自动。提供服务的 Pod 消失时——崩溃、驱逐、节点丢失或滚动更新——替代 Pod 只有取得租约后才能开始服务,因此不会出现两个主机同时连接消息代理的窗口。取得租约后,新领导者会:

  1. 重建会话,要求节点重新声明。
  2. 协调设备在线状态,避免遗漏切换期间的断开,也避免设备错误地保持在线显示。

恢复是自动的,但不是即时的。它需要替代 Pod 完成调度和启动的时间,再加上最长 30 秒的租约隔离窗口。没有保持第二条连接的热备,因为这正是单一所有权所要防止的情况。

状态

Sparkplug-B 接入作为可选服务提供。它接入测量数据,并驱动明确的设备在线状态。根据配置 URL,它通过 TLS 或明文连接消息代理。第二种原生标准边缘协议 LwM2M 也已提供。连接私有消息代理所需的自定义 CA / 双向 TLS 仍在计划中。

运维​

由于消息代理连接由单个副本持有,在生产环境依赖 Sparkplug 接入前,应了解几个运维特性:切换的代价、设备为什么可能一直显示在线,以及丢弃计数器说明什么。运行边缘服务介绍了这些内容。