gpt4 book ai didi

amazon-web-services - 使用 AWS 服务安排长时间运行的任务

转载 作者:行者123 更新时间:2023-12-04 08:04:15 30 4
gpt4 key购买 nike

我的应用程序严重依赖 AWS 服务,我正在寻找基于它们的最佳解决方案。 Web 应用程序触发计划作业(假设无限重复),该作业需要执行一定数量的资源。单次运行任务通常最多需要 1 分钟。

当前的想法是通过 SQS 传递作业并根据队列大小在 EC2 实例上生成工作程序。 (这部分或多或少清楚)
但是我很难找到一个合适的解决方案来以特定的时间间隔实际触发作业。假设我们正在处理 10000 个工作。因此,对于一个调度程序同时运行 10k 个 cronjobs(工作本身非常简单,只需通过 SQS 传递工作描述)似乎是一个疯狂的想法。所以实际的问题是,如何自动调整调度程序本身(考虑到调度程序重新启动、创建新实例等情况)?
或者调度程序作为应用程序是多余的,依赖 AWS Lambda 函数(或其他提供调度的服务)更明智?使用 Lambda 函数的问题是有一定的限制,单个函数提供的 128mb 提供的内存实际上太多了(20mb 似乎绰绰有余)

或者,worker 本身可以等待一段时间并通知调度程序它应该再触发一次作业。假设频率为 1 小时:

1. Scheduler sends job to worker 1
2. Worker 1 performs the job and after one hour sends it back to Scheduler
3. Scheduler sends the job again

然而,这里的问题是该 worker 有可能被扩大规模。

底线 我正在尝试实现一个轻量级的调度程序,它不需要自动缩放并作为一个集线器,其唯一目的是传输工作描述。当然不应该在服务重启时受到限制。

最佳答案

Lambda 非常适合这种情况。您有很多短期运行的进程(约 1 分钟),而 Lambda 则适用于短期进程(现在最多 5 分钟)。知道 CPU 速度与 RAM 呈线性关系非常重要。如果我没记错的话,一个 1GB 的 Lambda 函数相当于一个 t2.micro 实例,而 1.5GB 的 RAM 意味着 1.5 倍的 CPU 速度。这些功能的成本非常低,您可以执行此操作。 128MB RAM 的 CPU 速度是微型实例的 1/8,所以我不建议实际使用它们。

作为一种排队机制,您可以使用 S3(是的,您没看错)。创建存储桶并让 Lambda 工作线程在创建对象时触发。当您要安排作业时,请将文件放入存储桶。 Lambda 会立即启动并处理它。

现在你必须尊重一些限制。这样,您只能同时拥有 100 个工作人员(事件 Lambda 实例的总数),但您可以要求 AWS 增加此数量。

费用如下:

  • 每 1000 个 PUT 请求 0.005,因此每百万个作业请求 5 美元(这比 SQS 贵)。
  • Lambda 运行时。假设正常的 t2.micro CPU 速度(1GB RAM),每个作业的成本为 0.0001 美元(60 秒,前 300.000 秒是免费的 = 5000 个作业)
  • Lambda 请求。每百万次触发 0.20 美元(前一百万是免费的)

  • 此设置不需要您提供任何服务器。这不会下降(仅当 AWS 本身这样做时)。

    (完成后不要忘记从 S3 中删除作业)

    关于amazon-web-services - 使用 AWS 服务安排长时间运行的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34198414/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com