我目前正在开发一个平台,该平台约有 50,000 台设备连接到 Azure IOT 中心。由于这些设备的分区不平衡,我们一直遇到性能问题。基本上,如果一个设备在包含更多设备的给定分区中运行,那么它的性能会比在另一个包含较少设备的分区中运行要低。我们已将 IOT 集线器配置为最大数量的分区 (32),但我们仍然遇到此问题,即同一分区中驻留的设备过多。据我了解,分区分配基于设备 ID,在我们的例子中是 GUID,并且在幕后有一个哈希算法决定设备将驻留在哪个分区。
我们尝试使用未记录的 .NET Framework API EventHubPartitionKeyResolver.ResolveToPartition(在 .NET Core 中已删除)来解决该问题,该 API 本质上是在输入、设备 ID 上运行哈希算法,并返回它将驻留在其中的分区。可以迭代生成新的设备 ID,直到它落入我们知道不太拥挤的分区。 这种方法可行,但不是最佳的。
我想知道是否有其他人遇到过 IOT 集线器分区不平衡的问题,如果有,你是如何处理的。