运行 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.
每个事件总线限制 300 条规则也是如此。这也是一个默认限制,可以根据 the Service Quotas console 中的要求增加。
既然你提到了分支逻辑,我想知道你是否在 Step Functions 中研究过 AWS Step Functions? In particular, Express Workflows 可能适合你的执行持续时间和速率。
我正在 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.
每个事件总线限制 300 条规则也是如此。这也是一个默认限制,可以根据 the Service Quotas console 中的要求增加。
既然你提到了分支逻辑,我想知道你是否在 Step Functions 中研究过 AWS Step Functions? In particular, Express Workflows 可能适合你的执行持续时间和速率。