我有一个简单的场景,在这个场景中,我希望获取参数的当前值与来自IoT集线器遥测消息的以前值之间的差异,并将此结果附加到时间序列洞察环境(如果需要的话通过事件集线器发送)。
我怎样才能做到这一点?我正在研究Azure函数,但不知道如何准确地实现它。
消息之间的最小时间戳差为1秒,只有边缘设备(最大可能为3)才会发送遥测数据。每个边缘设备可能正在从大约500个设备中收集数据。
我正在寻找关于所涉及的逻辑步骤和一些Python代码关键部分的指导。
发布于 2022-01-18 15:10:21
这些是遥测信息还是财产变化?还有,规模(设备的数量)是多少?要有效地做到这一点,您需要确保既有当前的值,也有以前的值,这意味着在外部存储上一次报告的值和时间戳,因为这可能需要很长的时间间隔。事件集线器不能保证拥有所有过去的消息(默认是24小时),所以如果消息之间有很长的延迟,那么它就不是需要依赖的存储库。
持久实体可以用来存储状态(使用类似于Actor模型的东西)。这些在Azure存储中是持久化的,因此在极高的吞吐量下,只有内存的计算选项对于延迟持久性可能是有意义的,但是您可以在函数中构建一个内存缓存层,以便在需要时提供帮助。这很可能是你想要做的最好的选择。
对于大多数人来说,进入Azure存储和返回的性能影响是最小的,持久的实体将是最简单的前进之路。
发布于 2022-01-20 11:26:23
如果您是在一个近乎实时的流中这样做的,最好的解决方案是使用使用延迟运算符的。ASA有许多您需要的有用特性,例如分区BY和事件排序策略。请注意,ASA的运行成本很高,使用起来也很困难,但是对于商业解决方案来说,它是一项很好的服务。
如果您不需要接近实时,查询(blob)持久化数据的普通‘option脚本是一个很好的选择,如果运行时间不长,可以将其封装在Azure函数中。
Azure函数不建议用于有状态消息处理。您对运行的函数实例的数量、批处理的大小等没有足够的控制。因此,不可能始终如一地、自信地知道“以前”的timeseries值是什么。使用Azure函数,您必须假设并发性永远不会成为问题,这是流IoT数据所不能做到的。
https://stackoverflow.com/questions/70755132
复制相似问题