如何跟踪分布式任务的进度

时间:2018-06-27 07:49:56

标签: amazon-web-services amazon-s3 architecture distributed-system

这是我的情况:

  1. 我的服务器收到请求时,它将触发分布式任务,在我的情况下,它将执行许多AWS lambda函数(窥视值可能是3000)
  2. 我需要跟踪每个任务的进度/状态,即未决,运行,成功,错误
  3. 我的服务器可能有很多副本
  4. 即使我的任何服务器副本都关闭,我仍然想了解任务进度/状态

我当前的设计:

  1. 我选择AWS S3作为我的助手
  2. 开始执行任务时,它将在S3上的特殊文件夹中创建标记文件,例如运行文件夹
  3. 任务失败或成功时,它将标记文件从运行文件夹移动到 fail 文件夹或 success 文件夹
  4. 我在S3上检查了标记文件,以检查任务的进度。

问题:

  1. AWS S3并发访问有限制
  2. 我的案件有一天可能会超过限额

尝试解决方案:

  1. 我已尽力减少对S3的请求次数
  2. 我不想通过将数据存储在数据库中来跟踪进度,因为我的数据库已经负担很重。

说实话,在S3上使用标记文件来跟踪任务的进度有点奇怪。但是,它曾经起作用。

有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

这听起来像是持久事件队列(特别是Kinesis)的完美应用。每个Lambda启动时,它会在Kinesis上生成一个“启动”事件。成功或失败时,它将生成适当的事件。如果您想查看进度进展情况,甚至可以沿途创建进度事件。

然后,您的服务器可以针对结束事件(成功或失败)监视开始事件的数目,直到这两个数目相等为止。它可以查询错误事件,以查看哪些进程失败以及为什么。所有服务器都可以查询相同的事件而不会互相干扰,任何服务器都可以关闭并恢复而不会丢失数据。

确保将原始密钥放在应该组合在一起的事件上,以免它们与后续事件混淆。另外,每个Lambda都应具有自己的密钥,以便您可以跟踪每个Lambda的进度。指导对此非常适合。