如何从 azure 函数处理当前和以前的 IoT 中心事件?

How to process current and previous IoT Hub event from an azure function?

我有一个简单的场景,我想从 IoT 中心遥测消息中获取参数的当前值和先前值之间的差异,并将此结果附加到时间序列见解环境(如果需要,通过事件中心) ).

我怎样才能做到这一点?我正在研究 Azure 函数,但无法弄清楚如何去做。

消息之间的最小时间戳差异为 1 秒,并且只有边缘设备(最多可能为 3 个)将发送遥测数据。每个边缘设备可能从大约 500 台设备收集数据。

我正在寻找有关所涉及的逻辑步骤和 Python 代码

的一些关键部分的指导

这些遥测消息或 属性 有变化吗?还有规模(设备数量)是多少?为了有效地做到这一点,您需要确保您拥有 当前值和先前值,这意味着在外部存储最后报告的值和时间戳,因为它们之间的时间可能很长。事件中心不保证拥有所有过去的消息(默认为 24​​ 小时),因此如果消息之间存在很长的延迟,则它不是可以依赖的正确存储。

Durable Entities 可用于存储状态(使用类似于 Actor 模型的东西)。它们保存在 Azure 存储中,因此在 极高 高吞吐量下,仅内存计算选项可能对延迟持久性有意义,但您可以在函数中构建内存缓存层以在需要时提供帮助.这可能是您想要做的事情的最佳选择。

对于大多数人来说,进出 Azure 存储对性能的影响很小,持久实体将是最简单的前进路径。

如果您在接近实时的流中执行此操作,最好的解决方案是通过 LAG 运算符使用 Azure 流分析。 ASA 具有许多您需要的有用功能,例如 PARTITION BY 和事件排序策略。请注意,ASA 对 运行 来说可能很昂贵并且难以使用,但对于商业解决方案来说是一项很好的服务。

如果您不需要近实时,查询 (blob) 持久数据的普通 'ol python 脚本是一个不错的选择,如果不需要,可以将其包装在 Azure 函数中花太长时间 运行.

不建议将 Azure 函数用于有状态消息处理。您只是无法充分控制函数实例 运行ning 的数量、批处理的大小等。因此不可能始终如一地自信地知道 'previous' 时间序列值是多少。使用 Azure 函数,您必须假设并发永远不会成为问题,而流式 IoT 数据无法做到这一点。