处理频繁的设备双胞胎读取和节流

Dealing with frequent device Twin reads and throttling

受到 Azure IoT PCS Remote Monitoring repository 的启发,我开始基于 Azure Iot Hub 开发自己的物联网系统。

类似于 IoT PCS 存储库,我有一个 API 端点 (/api/devices),它 return 是我的 IoT 中心上的设备列表 - 当客户端发出请求时我使用Microsoft.Azure.Devices SDK 和 RegistryManager 创建查询和 return 设备孪生列表。这个 API 端点在我的前端 SPA 应用程序上使用和使用。

var result = await registryManager
                .CreateQuery("SELECT * FROM devices", 100)
                .GetNextAsTwinAsync(options);

这很好用,但是我发现如果你 运行 这个查询太频繁,很快你就会遇到 throttling。我使用的是 S1 层,如果我理解正确,我每分钟最多可以进行 20 个 Twin 查询。假设我的系统和客户群增长,这并不能很好地扩展。即使在更高层,规模也不是那么高。

问题是 - 您希望如何处理此限制?

到目前为止,我最好的想法是将 IoT 中心设备(孪生)数据复制到 CosmosDB/SQL 服务器并使用 IoT Hub endpoints 同步所有孪生更改。然后我不直接查询 IoT 中心,而是查询 CosmosDb/SQL。我不知道这种方法是否有任何好处。

我可以确认订阅孪生更改并复制所需的内容并报告给经常读取的数据库是一个可行的解决方案。

管道看起来像这样:IoT Hub -> Message routing:Endpoint -> Consumer -> To Db -> Fast unlimited reads.

The question is - how are you expected to deal with this limitation?

基于文档 Reference - IoT Hub quotas and throttling:

Throttle    Free, B1, and S1    B2 and S2       B3 and S3
--------------------------------------------------------------
Queries       20/min/unit       20/min/unit     1,000/min/unit

您可以使用门户或以编程方式扩展您的查询,增加单位数量(最多 200 个单位),例如 REST PUT request 根据需要。