【发布时间】:2015-12-10 09:45:28
【问题描述】:
我的应用程序严重依赖 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
然而,这里的问题是该工人可能会被缩减。
底线 我正在尝试实现一个轻量级的调度程序,它不需要自动缩放并作为一个枢纽,其唯一目的是传输工作描述。当然不应该在服务重启时受到限制。
【问题讨论】:
-
“长时间运行的任务”..“最多需要 1 分钟”:/
标签: amazon-web-services amazon-ec2 architecture scheduled-tasks amazon-sqs