任务配置的工作原理
您可以在部署任务时使用推出和中止配置,在执行任务时使用超时和重试配置。以下各部分显示有关这些配置如何工作的更多信息。
任务推出和中止配置
您可以使用任务推出和中止配置来定义每分钟接收任务文档的设备数量,以及特定数量的设备没有收到任务文档时取消任务的条件。
您可以指定向目标发送待处理任务执行通知的速度。您可以创建分段推出来更好地管理更新、重启和其他操作。若要指定目标的通知方式,请使用任务推出速率。
任务推出速率
您可以使用恒定推出速率或指数推出速率来创建推出配置。您可以使用恒定推出速率来指定每分钟可通知的最大任务目标数。
在满足各种条件和阈值时,可使用指数推出速率部署 Amazon IoT 任务。如果失败任务数与指定的一组条件相匹配,则您可以取消任务推出。在创建任务时,使用 JobExecutionsRolloutConfig 对象设置任务推出速率条件。在创建任务时,使用 AbortConfig 对象设置任务中止条件。
下面的示例显示推出速率的工作原理。例如,基本速率为每分钟 50 次、增量因子为 2、通知和成功设备数量各为 1000 的任务推出,其工作方式如下:该任务将以每分钟 50 次任务执行的速率开始,并以该速率继续工作,直到 1000 个事物收到任务执行通知或进行了 1000 次成功的任务执行。
下表说明了推出将如何通过前四个增量继续。
|
每分钟的推出速率 |
50 |
100 |
200 |
400 |
|
满足速率提高的通知设备数或成功的任务执行 |
1000 |
2000 |
3000 |
4000 |
使用动态事物组的连续任务的任务推出速率
当您使用连续任务在实例集中推出远程操作时,Amazon IoT Jobs 为目标事物组中的设备推出任务执行。对于添加到动态事务组中的任何新设备,这些任务执行会继续推出到新添加的设备,甚至在创建任务之后也是如此。
推出配置只能控制在创建任务之前添加到组中的设备的推出速率。创建任务后,对于任何新设备,一旦设备加入目标组,就会立即近乎实时地创建任务执行。
使用此配置可创建条件,以便设备的阈值百分比符合该条件时取消任务。例如,在以下情况,您可以使用此配置取消任务:
-
设备的阈值百分比没有收到任务执行通知时,例如设备与 OTA 更新不兼容。在这种情况下,设备可以报告
REJECTED状态。 -
设备的阈值百分比报告其任务执行失败时,例如设备尝试从 S3 URL 下载作任务文档时发生连接中断。在这种情况下,设备必须进行编程,才能向 Amazon IoT 报告
FAILURE状态。 -
任务执行开始后,任务执行超时的设备阈值百分比报告
TIMED_OUT状态时。 -
出现多次重试失败时。添加重试配置时,每次重试都可能让您的 Amazon Web Services 账户 产生额外费用。在这种情况下,取消任务可以取消排队的任务执行,避免重试这些执行。有关重试配置以及其与中止配置搭配使用的更多信息,请参阅 任务执行超时和重试配置。
您可以使用 Amazon IoT 控制台或 Amazon IoT Jobs API 设置任务中止条件。
任务执行超时和重试配置
当任务执行的时间超过设置的持续时间时,系统使用任务执行超时配置向您发送 任务通知。如果任务失败或超时,系统会使用任务执行重试配置来重试执行。
只要任务执行卡在 IN_PROGRESS 状态的时间超出预期,系统便会使用任务执行超时配置通知您。任务处于 IN_PROGRESS 状态时,您可以监控任务执行的进度。
任务超时计时器
有两种类型的计时器:进行中计时器和步骤计时器。
进行中计时器
创建任务或任务模板时,您可以为进行中计时器指定介于 1 分钟到 7 天之间的值。在任务执行开始之前,您可以更新此计时器的值。计时器启动后便无法更新,且计时器值应用于任务的所有任务执行。只要任务执行保持在 IN_PROGRESS 状态的时间长度超过了此间隔,任务执行将失败,并切换为最终 TIMED_OUT 状态。Amazon IoT 还将发布 MQTT 通知。
步骤计时器
您还可以设置仅适用于要更新的任务执行的步骤计时器。这种计时器不会对进行中计时器产生影响。您每次更新任务执行时,都可以为此步骤计时器设置新值。为事物启动下一个待处理任务执行时,您还可以创建新的步骤计时器。如果任务执行保持在 IN_PROGRESS 状态的时间长度超过了此步骤计时器间隔,它将失败,并切换为最终 TIMED_OUT 状态。
您可以使用 Amazon IoT 控制台或 Amazon IoT Jobs API 设置进行中计时器。若要指定步骤计时器,请使用 API。
任务超时计时器工作原理
下图说明了进行中超时计时器与步骤超时计时器在 20 分钟超时期限内相互作用的方式。
下面介绍了不同步骤:
-
12:00
此时会创建一个新任务,还会在创建任务时启动 20 分钟的进行中计时器。进行中计时器开始运行,任务执行切换到
IN_PROGRESS状态。 -
12:05 PM
此时会创建一个值为 7 分钟的新步骤计时器。任务执行现在会在 12:12 PM 超时。
-
12:10 PM
此时会创建一个值为 5 分钟的新步骤计时器。创建新步骤计时器后,系统会丢弃旧步骤计时器,任务执行现在会在 12:15 PM 超时。
-
12:13 PM
此时会创建一个值为 9 分钟的新步骤计时器。系统会丢弃旧步骤计时器,任务执行现在会在 12:20 PM 超时,因为进行中计时器会在 12:20 PM 超时。步骤计时器不能超过进行中计时器的绝对界限。
您可以在满足某组条件时使用重试配置来重试任务执行。如果任务超时或设备报告失败,就可以尝试重试。如果要因超时错误重试执行,则必须启用超时配置。
如何使用重试配置
下面介绍了如何使用重试配置:
-
确定是否对
FAILED、TIMED_OUT或这两种失败条件使用重试配置。对于状态,在报告状态之后,Amazon IoT Jobs 会自动重试设备的任务执行。TIMED_OUT -
对于
FAILED状态,请检查是否可以重试任务执行失败。如果可以重试,请对设备进行编程,以便向 Amazon IoT 报告FAILURE状态。以下部分介绍了有关可重试和不可重试失败的更多信息。 -
使用前述的信息指定每种失败类型的重试次数。最多可以为单台设备的两种失败类型组合指定 10 次重试。当执行成功或达到指定的尝试次数时,重试尝试会自动停止。
-
添加中止配置,以便在重复出现重试失败时取消任务,避免大量重试产生额外费用。
重试和中止配置
每次重试都会让您的 Amazon Web Services 账户 产生额外费用。为避免重复出现的重试失败产生额外费用,我们建议添加中止配置。有关定价的更多信息,请参阅 Amazon IoT Device Management 定价
当设备的高阈值百分比超时或报告失败时,您就可能遇到多次重试失败。在这种情况下,您可以使用中止配置取消任务,避免任何排队的任务执行或更多重试尝试。
符合取消任务执行的中止条件仅会取消 QUEUED 任务执行。系统不会尝试设备的任何排队重试。不过,当前具有 IN_PROGRESS 状态的任务执行不会遭到取消。
在重试失败的任务执行之前,我们还建议您检查任务执行失败是否可以重试,如下面的部分所述。
FAILED 失败类型重试
若要重试 FAILED 失败类型,就必须对设备进行编程,以便向 FAILURE 报告失败任务执行 Amazon IoT 状态。您还必须使用重试 FAILED 任务的条件来设置重试配置,以及指定要执行的重试次数。Amazon IoT Jobs 检测到失败状态时,将自动重试该设备的任务执行。任务执行成功或达到最大重试次数,重试才会停止。
您可以跟踪每次重试以及在这些设备上运行的任务。通过跟踪执行状态,您可以在达到指定的重试次数后,使用设备报告失败以及发起另一次重试。
可重试和不可重试失败
任务执行失败可以是可重试或不可重试的失败。每次重试都会让您的 Amazon Web Services 账户 产生费用。为避免因多次重试而产生额外费用,请先检查任务执行失败是否可以重试。可重试失败示例包括设备尝试从 S3 URL 下载任务文档时发生的连接错误。如果任务执行失败可重试,则可对设备进行编程,以便在出现任务失败时报告 FAILURE 状态,以及将重试配置设置为重试 FAILED 执行。
如果执行不可重试,为避免重试任务执行以及可能让您的账户产生额外费用,我们建议您对设备进行编程,以便向 Amazon IoT 报告 REJECTED 状态。不可重试失败的示例包括:设备与接收任务更新不兼容,或执行任务时遇到内存错误。在这些情况下,Amazon IoT Jobs 不会重试任务执行,因为只有在检测到 FAILED 或 TIMED_OUT 状态时才会重试任务执行。
在确定任务执行失败可重试后,如果重试仍然失败,请考虑检查设备日志。
TIMEOUT 失败类型重试
如果在创建任务时启用了超时配置,待状态从 IN_PROGRESS 更改为 TIMED_OUT 时,Amazon IoT Jobs 会重试设备的任务执行。如果进行中计时器超时,或者您指定的步骤计时器处于 IN_PROGRESS 中然后超时,此状态可能会发生更改。任务执行成功或达到此失败类型的最大重试次数后,重试才会停止。
持续任务和事物组成员资格更新
对于任务状态为 IN_PROGRESS 的持续任务,当事物组成员资格更新时,重试次数将重置为零。例如,假设您指定了五次重试,并且已经执行了三次重试。如果现已从事物组中删除事物,然后该事物重新加入该组(例如动态事物组),则重试次数将重置为零。您现在可以对事物组执行五次重试,而非剩余的两次重试。此外,从事物组中删除事物将取消其他重试次数。