【问题标题】:Serverless Task Scheduling on AWSAWS 上的无服务器任务调度
【发布时间】:2020-01-02 17:39:14
【问题描述】:

所以我们的项目使用 Hangfire 来动态安排任务,但考虑到服务器实例的自动缩放,我们决定取消它。我一直在寻找云原生无服务器解决方案,并决定将 CloudWatch Events 与 Lambda 结合使用。后来我发现可以创建的规则数量有上限(每个帐户 100 个)并且不会自动扩展。所以现在我被困住了,任何建议都会很棒!

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cloudwatch


    【解决方案1】:

    所以我决定按照 Diego 的建议去做,使用 CloudWatch Events 每分钟触发一次 Lambda,该 Lambda 将查询 DynamoDB 以检查需要执行的任务。

    我对将从 dynamoDb 获取的数据有些担心(如果执行时间超过 1 分钟,则会出现重复项),因此决定将该 Lambda 的并发设置为 1。

    我还担心直接从 Lambda 本身执行这些任务(超时和任务在长列表末尾),所以我正在做的是将任务分别推送到 SQS,另一个 Lambda 由SQS 并行执行这些任务。到目前为止结果看起来不错,如果有任何问题,我会继续更新这个帖子。

    【讨论】:

      【解决方案2】:

      根据CloudWatch Events documentation,您可以请求增加限制。

      每个区域每个帐户 100 个。您可以请求增加限额。为了 说明,请参阅 AWS 服务限制。

      在请求提高限制之前,请检查您的规则。你可能有 多个规则,每个规则都匹配非常具体的事件。考虑 通过在您的活动中使用更少的标识符来扩大其范围 CloudWatch 事件中的模式。此外,一个规则可以调用多个 每次匹配事件时的目标。考虑添加更多目标 你的规则。

      如果您尝试创建无服务器任务调度程序,一种可能的方法是:

      • 每分钟触发一次 lambda 函数的 CloudWatch 事件。
      • Lambda 函数读取 DynamoDB 表并决定此时需要执行哪些操作。
      • Lambda 函数可以将执行分派给其他函数或服务。

      【讨论】:

      • 是的,是的。但即使是限制增加也必须达到一定的数量对吧?无论如何我可以以自动扩展的方式做这样的事情吗?
      • 谢谢!我确实考虑过这一点,但我担心我将对 DynamoDB 表发出的请求数量。我想没有办法解决这个问题。
      • 您可以优化添加缓存层(例如 ElastiCache 中的 Redis),但您需要平衡缓存成本与直接向 DynamoDB 请求的成本。不要关闭优化的大门,但不要过早优化:)
      猜你喜欢
      • 2013-10-04
      • 2012-08-30
      • 2016-05-05
      • 2011-05-17
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多