如何使用分配策略跨 IoT 中心预配设备

Azure IoT 中心设备预配服务 (DPS) 支持多种内置分配策略,这些策略决定了 DPS 如何在一个或多个 IoT 中心分配设备。 DPS 还支持自定义分配策略,当内置策略无法提供 IoT 方案所需的功能时,你可以创建和使用自己的分配策略。

本文帮助你了解如何使用和管理 DPS 分配策略。

了解分配策略

分配策略确定了 DPS 将设备分配到 IoT 中心的方式。 每个 DPS 实例都有一个默认分配策略,可在注册时设置分配策略将其替换。 只有已链接到 DPS 实例的 IoT 中心才能参与分配。 链接的 IoT 中心是否参与分配取决于用于预配设备的注册中的设置。

DPS 支持四种分配策略:

  • 均衡加权分布:使用加权哈希将设备预配到 IoT 中心。 默认情况下,链接的 IoT 中心具有相同的分配权重设置,因此可能同样有预配到它们的设备。 可以调整 IoT 中心的分配权重,以提高或降低其被分配的可能性。 “均匀加权分布”是 DPS 实例的默认分配策略。 如果你只将设备预配到一个 IoT 中心,我们建议使用此策略。

  • 最低延迟:将设备预配到延迟最低的 IoT 中心。 如果有多个延迟最低的 IoT 中心,则 DPS 将根据其配置的分配权重在这些中心上对设备进行哈希处理。

  • 静态配置:将设备预配到单个 IoT 中心,必须在注册时指定。

  • 自定义(使用 Azure 函数) :自定义分配策略让你能够对设备分配到 IoT 中心的方式进行更多地控制。 可使用 Azure 函数中托管的自定义 Webhook 将设备分配到 IoT 中心实现此目的。 DPS 将调用 Webhook,提供有关设备和注册的所有相关信息。 Webhook 返回用于预配设备的 IoT 中心和初始设备孪生(可选)。 还可以与设备相互传递自定义有效负载。 若要了解详细信息,请参阅了解自定义分配策略。 不能设置为 DPS 实例默认策略。

注意

上面的列表显示了分配策略在 Azure 门户中的显示名称。 使用 DPS REST API、Azure CLI 和 DPS 服务 SDK 设置分配策略时,它们的名称为:hashed、geolatency、static、和 custom。

链接的 IoT 中心上有两个设置控制该中心参与分配的方式:

  • 分配权重:设置该 IoT 中心在参与涉及多个 IoT 中心的分配策略时的权重。 它可以是介于 1 和 1000 之间的值。 默认值为 1(或 null)。

    • 使用“均匀加权分布”分配策略时,与分配权重值较低的 IoT 中心相比,分配权重值较高的 IoT 中心被选中的可能性更大。

    • 使用“最低延迟”分配策略时,如果有多个 IoT 中心满足最低延迟要求时,分配权重值将影响某个 IoT 中心被选中的概率。

    • 使用“自定义”分配策略时,是否以及如何使用分配权重值将取决于 webhook 逻辑。

  • 应用分配策略:指定 IoT 中心是否参与分配策略。 默认值为“是”(true)。 如果设置为“否”(false),则不会将设备分配到 IoT 中心。 仍可以在注册时选择 IoT 中心,但它不会参与分配。 可以使用此设置暂时或永久禁止某个 IoT 中心参与分配;例如,在接近允许的设备数时。

若要详细了解如何在 DPS 实例中链接和管理 IoT 中心,请参阅链接和管理 IoT 中心

通过 DPS 预配设备时,服务会根据以下准则将该设备分配到 IoT 中心:

  • 如果注册指定了分配策略,则使用该策略;否则使用 DPS 实例的默认分配策略。

  • 如果注册指定了一个或多个 IoT 中心,则对这些 IoT 中心应用分配策略;否则,将对链接到 DPS 实例的所有 IoT 中心应用分配策略。 请注意,如果分配策略是“静态配置”,则注册必须指定一个 IoT 中心。

重要

当你更改分配策略或它应用到的 IoT 中心时,更改只会影响后续的设备注册。 已预配到 IoT 中心的设备不受影响。 如果你希望以回溯方式将更改应用于这些设备,需要重新预配设备。 有关详细信息,请参阅如何重新预配设备

设置 DPS 实例的默认分配策略

未在注册中指定分配策略时,将使用 DPS 实例的默认分配策略。 默认分配策略仅支持“均匀加权分布”、“最低延迟”和“静态配置”。 不支持“自定义”分配。 创建 DPS 实例时,其默认策略会自动设置为“均匀加权分布”。

注意

如果将“静态配置”设置为 DPS 实例的默认分配策略,则必须在依赖默认策略的注册中指定一个链接的 IoT 中心。

使用 Azure 门户设置默认分配策略

若要在 Azure 门户中设置 DPS 实例的默认分配策略,请执行以下操作:

  1. 在 DPS 实例的左侧菜单中,选择“管理分配策略”。

  2. 选择要设置的分配策略对应的按钮:“最低延迟”、“均匀加权分配”或“静态配置”。 (默认分配策略不支持“自定义”分配。)

  3. 选择“保存”。

使用 Azure CLI 设置默认分配策略

使用 az iot dps update Azure CLI 命令设置 DPS 实例的默认分配策略。 使用 --set properties.allocationPolicy 指定策略。 例如,以下命令将分配策略设置为“均匀加权分配”(默认设置):

az iot dps update --name MyExampleDps --set properties.allocationPolicy=hashed

DPS 还支持使用创建或更新 DPS 资源 REST API、资源管理器模板DPS 管理 SDK 设置默认分配策略。

为注册设置分配策略和 IoT 中心

单独注册和注册组可以指定分配策略及其要应用到的链接 IoT 中心。 如果注册未指定分配策略,则会使用 DPS 实例的默认分配策略。

在任一情况下,都适用以下条件:

  • 对于“均匀加权分布”、“最低延迟”和“自定义”分配策略,注册可以指定要使用哪些链接的 IoT 中心。 如果未在注册中选择任何 IoT 中心,则会使用 DPS 实例中所有链接的 IoT 中心。

  • 对于“静态配置”,注册必须从链接的 IoT 中心列表中指定单个 IoT 中心。

对于单独注册和注册组,可以在创建或更新注册时指定分配策略及其要应用到的链接 IoT 中心。

使用 Azure 门户管理注册分配策略和 IoT 中心

若要在 Azure 门户中为注册设置分配策略和选择 IoT 中心,请执行以下操作:

  1. 在 DPS 实例的左侧菜单中,选择“管理注册”。

  2. 在“管理注册”页上:

    • 若要创建新注册,请选择“注册组”或“单个注册”选项卡,然后选择“添加注册组”或“添加单个注册”。

    • 若要更新某个现有注册,请从“注册组”或“单独注册”选项卡下的列表中选择该注册。

  3. 在“添加注册”页(创建时)或“注册详细信息”页(更新时)上,选择“IoT 中心”选项卡。在此选项卡上,可以选择要应用到注册的分配策略,并选择要使用的 IoT 中心:

    Screenshot that shows the allocation policy and selected hubs settings on IoT hubs tab.

    1. 从下拉列表中选择可将设备分配到其中的 IoT 中心。 如果选择“静态配置”分配策略,则只能选择单个链接的 IoT 中心。 对于所有其他分配策略,默认将选择所有链接的 IoT 中心,但你可以使用下拉列表修改这种选择。 若要让注册在将链接的 IoT 中心添加到 DPS 实例(或从中删除)后自动使用这些中心,请取消选择所有 IoT 中心。

    2. (可选)可以选择“链接新的 IoT 中心”按钮,将新的 IoT 中心链接到 DPS 实例,并使其出现在可选择的 IoT 中心列表中。 有关链接 IoT 中心的详细信息,请参阅链接 IoT 中心

    3. 选择要应用到注册的分配策略。 默认已选择 DPS 实例的默认分配策略。 对于自定义分配,还需要在 Azure Functions 中指定自定义分配策略 Webhook。 有关详细信息,请参阅使用自定义分配策略教程。

  4. 设置注册所需的任何其他属性,然后保存设置。

使用 Azure CLI 管理注册分配策略和 IoT 中心

使用 az iot dps enrollment createaz iot dps enrollment updateaz iot dps enrollment-group createaz iot dps enrollment-group update Azure CLI 命令创建或更新单独注册或注册组。

例如,以下命令创建一个对称密钥注册组,该组默认使用 DPS 实例上设置的默认分配策略以及链接到 DPS 实例的所有 IoT 中心:

az iot dps enrollment-group create --dps-name MyExampleDps --enrollment-id MyEnrollmentGroup 

以下命令更新同一个注册组,以便对名为 MyExampleHub 和 MyExampleHub-2 的 IoT 中心使用“最低延迟”分配策略:

az iot dps enrollment-group update --dps-name MyExampleDps --enrollment-id MyEnrollmentGroup --allocation-policy geolatency --iot-hubs "MyExampleHub.azure-devices.cn MyExampleHub-2.azure-devices.cn"

DPS 还支持使用创建或更新单独注册创建或更新注册组 REST API 以及 DPS 服务 SDK 在注册中设置分配策略和选定的 IoT 中心。

分配行为

将分配策略与 IoT 中心配合使用时请注意以下行为:

  • 使用 Azure CLI、REST API 和 DPS 服务 SDK,可以创建没有分配策略的注册。 在这种情况下,当通过注册预配设备时,DPS 将使用 DPS 实例的默认策略。 更改 DPS 实例上的默认策略设置会更改通过注册预配设备的方式。

  • 使用 Azure 门户时,注册的分配策略设置中会预先填充默认分配策略。 可以保留此设置或将其更改为另一个策略,但在保存注册时,将在注册中设置分配策略。 后续对服务默认分配策略进行更改不会更改通过注册预配设备的方式。

  • 对于“均等加权分布”、“最低延迟”和“自定义”分配策略,可以将注册配置为使用链接到 DPS 实例的所有 IoT 中心:

    • 使用 Azure CLI 和 DPS 服务 SDK 时,可以在不指定任何 IoT 中心的情况下创建注册。

    • 使用 Azure 门户时,注册中会预先填充所有已链接到选定 DPS 实例的 IoT 中心;在保存注册之前请取消选择所有 IoT 中心。

    如果在注册中未选择任何 IoT 中心,则每当有新的 IoT 中心链接到 DPS 实例时,该中心将参与分配;反之,对于从 DPS 实例中删除的 IoT 中心,也是如此。

  • 如果在注册中指定了 IoT 中心,则必须手动或以编程方式更新注册中的 IoT 中心设置,这样才能添加新链接的 IoT 中心,或者从分配中移除已删除的 IoT 中心。

  • 更改用于注册的分配策略或 IoT 中心只会影响通过该注册进行的后续注册。 如果你希望更改影响以前的注册,需要重新预配以前注册的所有设备。

限制

使用分配策略和专用终结点时存在一些限制。 有关详细信息,请参阅专用终结点的限制

后续步骤