避免轮询活动任务时的延迟 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

避免轮询活动任务时的延迟

这些区域有:GetActivityTaskAPI 旨在提供taskToken 恰好一次。如果在通过活动工作线程通信时 taskToken 被丢弃,大量 GetActivityTask 请求可能会被阻止 60 秒以等待响应,直至 GetActivityTask 超时。

如果只有少量轮询等待响应,则可能所有请求都会排在被阻止的请求之后,无法处理。但是,如果每个活动 Amazon 资源名称 (ARN) 都有大量未完成轮询,某个百分比的请求需要等待,不过更多的请求仍然可以获取taskToken并开始处理工作。

对于生产系统,建议每个活动 ARN 在每个时间点至少有 100 个轮询。如果一个轮询被阻止,其后有一部分轮询排队,在 GetActivityTask 请求被阻止时,仍然有更多请求将获得 taskToken 可以处理工作。

避免在轮询任务时出现这类延迟问题:

  • 在活动工作线程实现的工作之外通过单独的线程实现轮询器。

  • 每个活动 ARN 在每个时间点至少有 100 个轮询。

    注意

    每个 ARN 都扩展到 100 个轮询会比较昂贵。例如,每个 ARN 100 Lambda 函数轮询比具有 100 个轮询线程的单个 Lambda 函数贵 100 倍。要降低延迟 最大限度减少成本,请使用具有异步 I/O 的语言,并且每个工作线程实施多个轮询线程。有关轮询器线程独立于工作线程的示例活动工作线程,请参阅示例ActivityRuby 中的工作线程

有关活动和活动工作线程的更多信息,请参阅Activities