c# - 处理频繁的设备双读和节流
问题描述
受Azure IoT PCS 远程监控存储库的启发,我开始在自己的基于 Azure IoT Hub 的 IoT 系统上工作。
与 IoT PCS 存储库类似,我有一个 API 端点 (/api/devices),它返回我的 IoT 中心上的设备列表 - 当客户端发出请求时,我使用 Microsoft.Azure.Devices SDK 和 RegistryManager 创建查询并返回设备孪生的列表。这个 API 端点在我的前端 SPA 应用程序中使用和使用。
var result = await registryManager
.CreateQuery("SELECT * FROM devices", 100)
.GetNextAsTwinAsync(options);
这很好用,但是我发现如果您过于频繁地运行此查询,您会很快遇到 throttling。我使用的是 S1 层,如果我理解正确,我可以每分钟最多进行 20 个 Twin 查询。假设我的系统和客户群增长,这并不能很好地扩展。即使在更高的层次上,规模也不是那么高。
问题是——你希望如何处理这个限制?
到目前为止,我最好的想法是将 IoT 中心设备 (Twin) 数据复制到 CosmosDB/SQL Server 并使用IoT 中心端点同步所有孪生更改。然后,我不会直接查询 IoT Hub,而是查询 CosmosDb/SQL。我不知道这种方法是否有用。
解决方案
我可以确认订阅双更改并复制所需的并报告给经常读取的数据库是一个可行的解决方案。
管道如下所示:IoT Hub ->
Message routing:Endpoint ->
Consumer ->
To Db ->
Fast unlimited reads。
推荐阅读
- python - 在 Tensorflow 中使用神经网络的奇怪决策边界
- rust - 如何使用 PalletB 从 PalletA 保存记录,而 PalletA 不知道节省基材和生锈的内部机制
- php - 为什么从数据库加载的 JSON 上的 PHP json_decode 不起作用?
- html - 应该使用什么数据类型将联系人号码插入 mysql?
- r - ggplot更改单日POSIXct变量的x轴起点
- javascript - React Native - 如何拍摄多个快照并选择它们
- javascript - 将字符串日志转换为 Json 格式
- asp.net-core - 将子对象从具有不同模型的视图传递到部分视图,在发布表单时将其绑定
- spring-boot - SpringBoot actuator system.cpu.count metric 和 system.cpu.usage metric 的关系
- swift - macOS - 使用比部署目标更新的 UI 元素编译 xib