【问题标题】:SWF Activity is not completing even though the computation has finished即使计算已完成,SWF 活动也未完成
【发布时间】:2018-12-28 00:52:11
【问题描述】:

我正在测试一个新的 SWF 工作流,并且我有一些活动可以对另一个服务进行 RESTful 调用。问题是,我可以通过日志记录看到实际调用需要不到一秒的时间才能完成,但 Activity 总是在 SWF 中超时(START_TO_CLOSE 为 5 分钟)。更具体地说,RESTful 调用是一个列表调用,当我将批处理大小限制为一个较小的数字时,Activity 会很快完成并继续前进。但在某个看似随意的阈值上,它会完全窒息。

有人对此有任何见解吗?我读到 SWF 调用的大小限制为 1 MB,有人知道如何找到我的工作人员尝试传递 SWF 的数据大小吗?

【问题讨论】:

    标签: amazon-web-services amazon-swf


    【解决方案1】:

    经过一些远程调试,结果发现任务的响应太大,活动无声无息地失败。当框架尝试将响应报告回 SWF 并且 SDK 调用RespondActivityTaskCompleted 时,会发生故障。该 API 对内部 result 参数有长度限制:

    长度约束:最大长度为 32768。

    这是一个验证错误,它会引发未捕获的异常并在内部被吞噬,直到 Activity 超时。

    【讨论】:

      【解决方案2】:

      我不建议使用活动输入和输出参数来传递大型数据集。 SWF 是一种编排技术,而不是数据传递技术。标准的解决方法是:

      • 将结果存储在单独的存储(例如 S3)中并传递对它的引用。
      • 在计算机上本地缓存结果并将所有后续活动路由到同一主机,以便它们可以访问缓存结果。有关路由方法的详细信息,请参阅fileprocessing 示例。

      顺便说一句。您是否查看过Cadence,它是 SWF 的开源版本,具有更好的客户端库?

      【讨论】:

      • 是的,我通过传递对象引用而不是对象本身解决了这个问题。至于 Cadence,这是一个新的工作流程,作为已经加入 SWF 的现有服务的一部分,但感谢您的建议!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      相关资源
      最近更新 更多