AWS - 负载均衡实例& Cron Jobs

时间:2016-09-07 16:46:49

标签: laravel amazon-web-services cron

我有一个Laravel应用程序,其中应用程序服务器位于Load Balancer后面。在这些应用程序服务器上,我运行了cron作业,其中一些应该只运行一次(或在一个实例上运行)。

我做了一些研究,发现人们似乎更喜欢锁系统,你可以在每个应用程序框中保持所有cron作业活动,当一个人去处理一个工作时,你会创建某种锁,所以其他人知道不要处理同样的工作。

我想知道是否有人就AWS的这个程序有更多细节,或者是否有更好的解决方案来解决这个问题?

3 个答案:

答案 0 :(得分:3)

您可以使用带有strongly consistent reads的DynamoDB在AWS上构建分布式锁定机制。你也可以使用Redis(ElastiCache)做类似的事情。

或者,您可以使用Lambda预定事件按照cron计划向负载均衡器发送请求。由于只有一个后端服务器会收到服务器可以执行cron作业的请求。

当您的自动扩展组遇到扩展事件并且处理该任务的服务器被删除时,这些解决方案往往会中断。我更喜欢有一个像t2.nano这样的小型服务器,它不属于集群,并且可以安排cron作业。

答案 1 :(得分:0)

查看此软件包以了解锁系统的Laravel实现(数据库实现): https://packagist.org/packages/jdavidbakr/multi-server-event

此外,此拉取请求使用锁定系统(缓存实现)解决了此问题: https://github.com/laravel/framework/pull/10965

答案 2 :(得分:-1)

如果您只需要在全局范围内运行一次(所以不是每台服务器都运行一次)并且“锁定”#39;需要运行的东西,我强烈建议使用AWS SQS,因为它提供了这样的:运行cron来获取票证。如果你得到一个,解析它。否则,什么也不做。因此,所有的机器上都有活动,但是机票在飞行中#39;当某台机器请求票证时,另一台机器无法请求该特定票证。