我的应用程序严重依赖于AWS服务,我正在寻找一种基于它们的最佳解决方案。Web应用程序触发一个定时任务(假设无限重复),需要执行一定数量的资源。单次任务运行通常最多需要1分钟。
目前的想法是通过SQS传递作业,并根据队列大小在EC2实例上生成工作程序。(这部分或多或少清楚)但我很难找到一个合适的解决方案来实际触发某些间隔的作业。假设我们正在处理10000个作业。因此,对于调度程序运行10k cronjobs(作业本身非常简单,只需通过SQS传递作业描述)同时运行似乎是一个疯狂的想法。因此,实际问题是如何自动缩放调度程序本身(考虑到调度程序重新启动,创建新实例等情况)?或者调度程序本身作为应用程序是多余的,更明智的做法是依靠AWS Lambda函数(或提供调度的其他服务)?使用Lambda函数的问题是某些限制以及单个函数提供的128mb内存实际上太多了(20mb似乎足够了)
或者,工作程序本身可以等待一定时间并通知调度程序再次触发作业。假设频率为1小时:
目前的想法是通过SQS传递作业,并根据队列大小在EC2实例上生成工作程序。(这部分或多或少清楚)但我很难找到一个合适的解决方案来实际触发某些间隔的作业。假设我们正在处理10000个作业。因此,对于调度程序运行10k cronjobs(作业本身非常简单,只需通过SQS传递作业描述)同时运行似乎是一个疯狂的想法。因此,实际问题是如何自动缩放调度程序本身(考虑到调度程序重新启动,创建新实例等情况)?或者调度程序本身作为应用程序是多余的,更明智的做法是依靠AWS Lambda函数(或提供调度的其他服务)?使用Lambda函数的问题是某些限制以及单个函数提供的128mb内存实际上太多了(20mb似乎足够了)
或者,工作程序本身可以等待一定时间并通知调度程序再次触发作业。假设频率为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
然而这里的问题是工人可能被刻度缩放。
重点 我正在尝试实现一个轻量级的调度程序,它不需要自动扩展,并且作为传输作业描述的中心,绝对不应在服务重新启动时出现限制。