假设我们有一个带有传感器的设备(例如,一堆天气传感器,如风/空气/嗡嗡声/温度),并且该设备需要向 AWS IoT 报告其状态。
假设每分钟设备都会将一堆读数发布为一个大 json:
{
"temp" : 10,
"wind: 100,
"humidity" : 98.3,
....
....
"metric98": 23456,
"metric99": 56789
}
我可以看到将这些更新发送到 AWS IoT 的两种方法:
- 将状态发布到 AWS IoT 影子服务主题
$aws/things/super-weather-001/update
- 将它们发布到任意主题,例如。
mytopic/my-weather-data/super-weather-001
......
这两种情况下,我都必须在 AWS IoT 上创建一个规则,该规则稍后会将这些指标放入 DynamoDb 或以任何其他方式处理它们。
哪个主题($aws/...或我的)用于发布指标更好吗?
附言。我知道AWoT阴影服务非常方便计算增量与"期望"状态。但就我而言,诀窍是,对于来自气象站的常规"指标"(如温度或湿度),我没有"期望"状态。我不会在设备上设置温度,只会读取,因此无需计算增量。
AWS IOT 论坛上也有类似的查询 - https://forums.aws.amazon.com/thread.jspa?messageID=703199򫫟
底线,你可以走任何一条路。目前还不清楚一方是否比另一方具有决定性的优势。正如您提到的,使用自定义主题,无需计算阴影主题的增量和其他开销,因此这可以减少延迟,但除非您拥有大量传感器并不断发布值,否则我认为这应该不是问题。
有人可能会争辩说,传感器值仍然构成设备的"状态"(不断变化),并且这些值是"只读的",因此所需的状态没有意义,因此客户端不会使用。
如果一些 AWS 架构师可以参与进来,那就太好了。