MQTT 数据使用
本节介绍使用 MQTT 接口与物联网设备管理门户通信时使用的数据量的详细信息。 通常有一些考虑因素,首先是传送的实际有效负载。
有效负载取决于:
- 使用 TR50 接口还是服务器主题接口。
- 第二个因素是 MQTT 协议开销,这是包装有效负载的实际 MQTT 协议框架。
- 最后一个因素是用于与托管系统进行通信的 TCP 开销。
TCP 协议开销
- 有关 TCP 协议的详细信息:见此处
- TCP 连接使用大约 96 个字节(SYN、SYN-ACK、ACK)
- 在发送和接收数据时,每个传输使用大约 64 字节的开销(PSH、ACK)。
- 在 send and reply(发送和回复)场景中(即从设备到物联网设备管理门户):
- 如果回复“快” (<1 ms),则事务可能会使用 96 字节的开销(PSH、PSH-ACK、ACK)
- 如果回复“慢”,则事务将使用 128 字节的开销(PSH、ACK、PSH、ACK)
MQTT 协议开销
- 协议规范由 IBM 提供:见此处
- MQTT 连接使用大约 86 字节的数据(CONN 和 CONNACK)
- 在 send and reply(发送和回复)场景中(即从设备到云的 API 调用):
- 将有一个从设备到云的 PUBLISH,其使用 15 字节的开销 (PUBLISH)。
- 还有一个从云到设备的 PUBLISH,其包含使用另外 15 字节开销的回复 (PUBLISH)。
- 在推送数据的 server topic(服务器主题)场景中:
- 将有一个从设备到云的 PUBLISH,其使用 15 字节的开销 (PUBLISH)。
- 如果 QOS 设置为 1,则会有一个从云到设备的 PUBACK,其开销为 2 字节 (PUBACK)。
- MQTT 定义了心跳间隔,并且在该间隔内,客户端将向服务器发送 PINGREQ 数据包,继而服务器将发送 PINGRSP,每个数据包都使用 2 字节的开销。 心跳间隔可以配置,并且在发生网络故障(客户端和服务器检测到存在通信错误)时会影响延迟。
- 如果将心跳间隔设置为 24 小时,则每天只发送 1 次心跳;但如果发生网络故障,则在发送心跳消息之前,客户端和服务器将无法识别该故障。 这种情形是否能够接受,取决于应用的设计。
TR50 协议开销
- TR50 使用 JSON 编码消息(ASCII 协议)。
- 可选择使用 zlib 压缩 TR50 消息以减少使用。
- 有关调整大小时使用的示例 API 消息,请参见 API 指南:见此处
- 使用管理门户 API 在线测试查看原始和压缩的不同请求的大小
- 使用 deviceWISE 资产网关时,可以使用两种功能进一步减少数据使用:
- 命令聚合器
命令聚合器将一个时间窗口内发出的许多 API 调用组合在一起,构建一个更大的数据包(高效率压缩)。 您可以指定组合的时间窗口以调整流量。 为找到用例的最佳设置,需要进行反复试验。 在某些测试场景中,聚合可以将数据压缩率从未经聚合时的 25% 提高至使用聚合后的 90%。 - 批处理
使用命令聚合器时,一些命令会自动进行“批处理”以提高性能。 例如,当传送属性时,它们将使用 property.batch API 进行组合以降低传送时的开销。 如果使用命令聚合器,此组合行为自动进行。
- 命令聚合器
示例场景
以下是一些示例场景,从中可以看出数据的计算方法。
请注意以下事项:
- 场景中是“理想”的网络条件,也就是没有导致重新连接的虚假连接丢失。
- 使用资产网关时,在连接后,系统会自动进行多次 API 调用以同步代理,这些 API 调用不包括在下面的计算中。
每小时连接并传送 1 个属性
活动 | TR50 | MQTT | TCP | 总计 | 说明 |
---|---|---|---|---|---|
TCP 连接 | 96 | 96 | |||
MQTT 连接 | 64 | 128 | 192 | ||
MQTT 心跳 | 4 | 96 | 100 | 1 小时心跳间隔 | |
TR50 发布属性(请求) | 109 | 15 | 64 | 188 | |
TR50 发布属性(回复) | 47 | 15 | 64 | 126 | |
每小时总数据量 | 702B | ||||
每月总数据量 | 500KB |
保持连接,每小时传送 1 个属性
活动 | TR50 | MQTT | TCP | 总计 | 说明 |
---|---|---|---|---|---|
TCP 连接 | 96 | 96 | |||
MQTT 连接 | 64 | 128 | 192 | ||
MQTT 心跳 | 4 | 96 | 100 | 1 小时心跳间隔 | |
TR50 发布属性(请求) | 109 | 15 | 64 | 188 | |
TR50 发布属性(回复) | 47 | 15 | 64 | 126 | |
每小时总数据量 | 414B | 未计入连接 | |||
每月总数据量 | 298KB |
保持连接,每小时传送 100 个属性
活动 | TR50 | MQTT | TCP | 总计 | 说明 |
---|---|---|---|---|---|
TCP 连接 | 96 | 96 | |||
MQTT 连接 | 64 | 128 | 192 | ||
MQTT 心跳 | 4 | 96 | 100 | 1 小时心跳间隔 | |
TR50 发布属性(请求) | 1635 | 15 | 64 | 1714 | 假定批处理 100 个属性,压缩率为 85% |
TR50 发布属性(回复) | 47 | 15 | 64 | 126 | |
每小时总数据量 | 1.9KB | 未计入连接 | |||
每月总数据量 | 1.4MB |