影子解决离线状态问题
设备经常离线或带宽有限,而平台需要随时查询状态、下发配置,于是把状态放到平台侧维护:影子保存设备最近上报的实际状态、平台期望设备达到的状态,以及一个随每次变更递增的版本号。设备上线后对比期望与自身状态,执行差异并回报结果。
组成与注意点
| 组成 | 含义 | 注意 |
|---|---|---|
| 上报状态 | 设备最近一次上报的实际状态 | 由设备写入,平台侧只读 |
| 期望状态 | 平台希望设备达到的状态 | 由平台写入,设备读取并执行 |
| 版本号 | 每次变更递增,用于并发控制 | 设备回报时携带,便于判断新旧 |
| 时间戳 | 状态更新时间 | 用于判断影子内容是否过期 |
| 执行回报 | 设备执行期望状态后的结果 | 缺少回报时平台无法确认是否生效 |
典型使用场景
- 离线配置下发:设备不在线时先写入期望状态,上线后自动同步
- 状态查询:平台与界面不必等待设备响应即可展示最近状态
- 配置收敛:对比期望与实际,发现长期未生效的设备
- 灰度变更:按设备分组写入不同期望状态,分批生效
影子不是设备状态的实时镜像:内容新鲜度取决于设备上报频率,界面展示时应同时显示时间戳,避免使用者把旧值当成当前值。
期望状态写入后不会自动重试:设备始终未上线时配置会静默失效,需要由平台侧补充超时提醒与督办机制。
职责边界
上报状态由设备驱动、期望状态由平台驱动,职责清晰才不会互相覆盖:设备不应直接改写期望状态,平台也不应伪装成设备改写上报状态。