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

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

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

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

如果只有少量轮询等待响应,则可能所有请求都会排在被阻止的请求之后,无法处理。但是,如果您的每项活动都有大量未完成的民意调查 Amazon Resource Name (ARN),并且您的请求中有一部分处于等待状态,那么还有更多的人仍然可以获得taskToken并开始处理工作。

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

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

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

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

    注意

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

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