跳转到内容

物联网业务遥测

权威来源:AetherCloud。此页面镜像到统一的 AetherIoT 文档中。

实现了协议中立域、应用程序摄取/历史用例、规范批量摘要、内存一致性适配器、实验性 CloudLink MQTT 点批量映射和 PostgreSQL 遥测适配器。 PostgreSQL 切片以原子方式存储重播身份、流/游标状态、接受的业务事实、审核、集成发件箱和精确持久的 ACK 发件箱。它证明了针对 PostgreSQL 18 的提交前回滚和提交后相同 ACK 恢复。公共 HTTP 历史记录、生产数据库组成、联合生产身份验证、多样本映射和持久数据丢失持久性仍在计划中;内存适配器不是生产耐久性声明。

物联网业务遥测是租户拥有的产品数据。它不是 OpenTelemetry 操作数据。 AetherEdge 运行时对当前实时积分值保持权威; AetherCloud 存储重放安全、带有时间戳的历史事实和新鲜度标记的预测。

第一个切片使用显式资源而不是通用实体表:

  • TelemetryStream 标识网关的一个有序逻辑上行链路流。
  • StreamEpoch 在有意的流之后隔离序列重用
  • StreamPosition 是一个无符号 64 位值,在 JSON 边界处编码为规范十进制字符串,并在 TypeScript 中无损表示。
  • TelemetryBatch 是原子摄取单元,拥有有界有序记录列表。
  • PointSample 携带实例/获取点身份、源时间、输入值和源质量。仅接受 telemetrystatus 点类型;命令/操作类型不能成为控制后门。
  • TelemetryTopologyBinding 为每个批次保留边缘发布纪元和算法限定的拓扑快照摘要。
  • Thing Model 引用是可选的,并且必须来自委托证据; AetherCloud 并未为边缘原生点发明一个点。
  • DeviceEvent 携带版本化事件类型、源时间和有界类型负载。
  • IngestionReceipt 记录批次标识、摘要、持久游标、接受状态和云持久时间。
  • RetentionClass 选择授权保留策略;调用者不提供任意存储持续时间。

AetherEdge 目前公开获取的数字样本和四种质量状态。云价值模型对于未来的事物模型可能会更广泛,但第一个电汇合约不得声明边缘无法发出的边缘价值变体。

CloudLink 在调用摄取用例之前,根据经过身份验证的活动网关凭据解析租户、项目、网关和凭据生成。信封可以重复这些标识符以进行关联,但有效负载字段永远不是授权证据。暂停或撤销的凭证生成无法关闭。

应用程序命令为 telemetry.batch.ingest。它需要网关凭证范围、过期、幂等性、审计、有限大小以及应用程序拥有的仓库/收件箱事务。 HTTP、测试装置或未来的备用传输必须调用相同的命令,而不是直接写入历史记录。

实现的稳定身份是:

TenantId + ProjectId + GatewayId + StreamId + StreamEpoch + first position

规范的有效负载摘要涵盖版本化的业务内容,而不是传输标头、跟踪上下文、重试计数、套接字身份或压缩字节。

MVP 以原子方式接受完整的批次。验证、限制、授权、记录唯一性、摘要计算、序列评估、收件箱身份、业务事实、所需审核和发件箱事件在一笔交易中成功,否则不被接受。未来的部分记录模式需要新的契约版本和每条记录的收据。

重复、冲突、间隙和重新排序行为

Section titled “重复、冲突、间隙和重新排序行为”
  • 相同的身份和摘要是重复的。它返回先前的持久确认,而不会再次创建历史记录或集成事件。
  • 具有不同内容的相同身份是冲突的重复项。它被隔离、审核,并且永远不会被确认为已接受。
  • 事务提交后,下一个连续批次会推进持久游标。
  • 前向间隙是持久可观察的并请求重播。它不会推进连续的确认光标。
  • 有界的重新排序窗口可能会将后面的批次保留为待处理。禁止无限缓冲。
  • 早于持久游标的批次要么是经过验证的重复项,要么是冲突;年龄本身并不能证明平等。
  • 边缘的保留溢出成为明显的损失/差距标记。双方都没有伪造丢失的样本。

receiveddecodedvalidatedaccepteddurably persistedacknowledged 是不同的观察结果。 CloudLink 仅在包含重复数据删除身份和接受的业务事实的事务提交后才可以发送成功的持久确认。

如果在网关收到该确认之前连接失败,网关将安全地重播该批次。提交后的崩溃在重播时返回相同的收据。在尝试任何新的接受之前,必须通过幂等性身份解决具有未知提交结果的存储超时。

实现的 PostgreSQL 路径在同一事务中存储精确的 alpha.3 ACK 投影。有界交付工作线程使用 FOR UPDATE SKIP LOCKED 租用待处理行,按顺序发布,仅在成功发布后标记交付,并释放有界重试的失败。重播重新排队相同的事件 ID、收据 ID、持续时间、流位置、批次 ID 和摘要;它永远不会发明第二个商业事实。应用程序在发布之前会在适配器边界验证所有已声明的行。

每条记录至少保留:

  • 边缘/源事件时间
  • 云接收时间
  • 云持续时间
  • 流历元和位置
  • 源质量

历史查询公开源和位置摄取时间。最新价值预测还揭示了其持久地位、新鲜度和已知的差距状态。它永远不会被标记为当前的物理值。最新数据保留在事件时间历史记录中,但不能默默地向后滚动最新的投影。

PostgresTelemetryRepository 现在拥有流元数据、持久收件箱身份、连续游标、间隙状态、保留策略、有限历史记录、审核、集成发件箱和 CloudLink ACK 发件箱的第一个有限实现。租户范围的密钥和强制行级安全是深度防御;正常的应用程序角色仍然是非超级用户和非BYPASSRLS

对象存储拥有内容寻址的原始/冷批次,并在其大小合理时导出。未来的时间序列或分析适配器拥有大量历史记录、聚合和下采样。这两个存储都不会成为实时状态权威。

历史端口由遥测应用程序上下文拥有,因此测量的摄取热路径可以在不更改域契约的情况下移动。

解码器拒绝不支持的契约版本、不安全的整数编码、非有限数字样本、未知的记录变体、批次内的重复位置、过多的记录、过大的值、解压扩展和无限制的元数据。配额拒绝和背压是可见的结果,而不是无声的损失。

TenantId、ProjectId、GatewayId、PointId、原始负载和任意事件类型字符串禁止作为 OpenTelemetry 指标标签。注册令牌、凭据、私有材料和授权标头绝不会输入遥测有效负载、错误、日志、跟踪或审核详细信息。

  • 命令 telemetry.batch.ingest:已实现的域/应用程序、内存和 PostgreSQL 适配器。
  • 查询 telemetry.history.query:应用程序、内存和有界 PostgreSQL 适配器已实施。
  • 事件 telemetry.batch-accepted.v1:已实施内存和 PostgreSQL 事务发件箱行为。
  • 精确 CloudLink 持久 ACK 发件箱和有界传送用例:为接受的遥测实施;生产工作进程组成已计划。
  • 流游标、间隙、滞后和保留状态查询:已计划。
  • CloudLink MQTT 适配器:实验性编解码器/bridge/ingress 和已实施的共享 alpha.3 AetherEdge 固定清单;桥接器消耗持久的 ACK 投影,而生产数据库/工作线程组成和会话持久性仍保持计划。
  • HTTP历史适配器:已计划。

读取 ADR-0007 以了解持久摄取决策,并为单独的 OpenTelemetry 信号路径读取 操作可观察性