运行 AWS 中的数千个定期作业?

Running thousands of scheduled jobs in AWS on a regular cadence?

我正在 AWS 中构建一个应用程序解决方案,并且正在研究 AWS 的选项,以便 运行 将一次性作业定期 运行。

例如,我们有一个任务需要每 5 分钟 运行 对外部 API 调用 API,解释数据,然后可能存储一些新的数据库中的信息。此特定任务预计 运行 30 秒左右,并且需要每 5 分钟 运行。这变得有点复杂的是我们正在 运行 宁一个多租户应用程序,这个任务需要为每个租户单独执行。单个进程按顺序为每个租户执行指定任务不能满足用户的要求。该任务必须每 x 分钟(有时低至每分钟)执行一次,并且必须以恰好执行该任务 1 次所需的速度为每个租户完成。换句话说,假设所有 200 个租户必须在午夜为他们完成任务 运行,每个租户都在查询 API 和更新一个租户的数据库所需的时间内完成任务.

更复杂的是,这 不是 我们将 运行 定期为租户完成的唯一任务。最后我们可能有几十个独特的任务,每个 运行ning 用于数百个租户,导致数千或数万个独特的并发任务。

我研究过使用 CloudWatch Events(现在是 EventBridge)的 ECS 计划任务,但 EventBridge 对每个事件总线有 300 条规则的限制。我 认为 这意味着如果我们需要 10,000 条规则(每个任务一个 * 租户数量),我们将不走运,但老实说我不确定是否每个帐户都有自己的事件总线,或者如果划分不同的话。

无论如何,即使这确实有效,在 EventBridge 中设置 10,000 条不同的规则对我来说仍然不是一个非常有吸引力的选择。至少,感觉它可能很难管理。为此,我现在更关注为每个事件类型创建一个 EventBridge 规则,该规则将启动一个父任务,然后异步启动所需子任务的多个异步实例,每个租户一个。这会将我们的 EventBridge 规则限制在几十个左右。其中每一个在被触发时都会为每个租户异步生成一个任务,这些任务可以 运行 在一起。我不是 100% 确定这将产生什么类型的对象,它不会是 Lambda,因为这很容易导致我们达到 1,000 个并发 Lambda 函数限制,但它可能类似于 Fargate ECS 任务,执行几秒钟然后在完成后消失。

我很想听听其他人对这些选项的看法、我目前的方向以及我目前缺少的任何其他选项。

您不必为此查看 ECS,因为一次 1,000 次 Lambda 调用只是默认的并发限制。这是您可以在 the Service Quotas console:

中要求增加的内容

There is no maximum concurrency limit for Lambda functions. However, limit increases are granted only if the increase is required for your use case.

来源:AWS Support article.

每个事件总线限制 300 条规则也是如此。这也是一个默认限制,可以根据 the Service Quotas console 中的要求增加。

既然你提到了分支逻辑,我想知道你是否在 Step Functions 中研究过 AWS Step Functions? In particular, Express Workflows 可能适合你的执行持续时间和速率。