我有以下设置:1应用程序X的服务器,每小时运行一次crontab。 crontab连接到数据库并运行一些繁重的计算,并将数据导出到特定的数据文件并重新启动应用程序。 导出可以在10分钟到40分钟之间运行。
我要:
将该服务器移至AWS并使用自动缩放组。
crontab只在一台服务器上运行,计算导出数据并以某种方式将其同步到所有其他活动服务器。
所有服务器都应该自动检测新数据并安全地重启(不是在同步时)。
从自动扩展组开始的新服务器在启动实际应用程序之前会自动获取启动时的数据文件。
我没有一个关于如何做这个或任何AWS特定解决scheme的“简单”的想法。
这是我的想法:
在自动缩放组外运行一台服务器。 只在该服务器上执行crontab。 所有的数据文件将被上传到S3。
所有自动缩放服务器都将有一个每分钟运行一次的crontab并检查一个唯一文件“please_download_me_TIMESTAMP”
一旦文件被下载,脚本将重新启动服务。
如果新服务器启动,在启动时它将自动从S3中获取所有文件。
你认为这会起作用吗?
这是AWS EC2中的常见问题,已解决。 有关实现的示例,请参阅https://gist.github.com/kixorz/5209217 。
承认这是从2015年起的老问题,乔碰到了,所以我不妨回答一下。
如果这项工作每小时一次,需要10-40分钟,那么无论如何你都要支付一整小时。 启动和closures服务器没有意义,只是让服务器运行。
如果不是那么频繁的,你可以有一个定时事件,把一条消息放到一个SQS队列中 – 这可以通过t2.nano完成,也可以有一个更便宜的方式来与亚马逊服务 – Lambda? 基于队列大小的自动缩放。 当有数据需要处理时,服务器被创build,处理数据,随时随地移动数据,然后closures数据。
另一种方法是基于时间的缩放,但是再一次只有在小时的情况下。