Php 在多租户应用程序中创建计划作业
我正在使用Laravel/PHP构建一个多租户web应用程序,最终将作为SaaS托管在AWS上。我有大约15-20个不同的背景工作,需要安排每个租户。这些工作也需要每5分钟解雇一次。因此,100名租户需要解雇的工作岗位数量大约为2000个。要实现这一目标,我还有两个挑战Php 在多租户应用程序中创建计划作业,php,laravel,amazon-web-services,cloud,scheduled-tasks,Php,Laravel,Amazon Web Services,Cloud,Scheduled Tasks,我正在使用Laravel/PHP构建一个多租户web应用程序,最终将作为SaaS托管在AWS上。我有大约15-20个不同的背景工作,需要安排每个租户。这些工作也需要每5分钟解雇一次。因此,100名租户需要解雇的工作岗位数量大约为2000个。要实现这一目标,我还有两个挑战 是否有一个云解决方案可以自动分配和管理计划作业的负载 如果有一个在那里,我们如何能够在运行中创建15个以上的计划作业?有API可用吗 正在寻求您的帮助Laravel可以选择安排任务/作业: 参考: 因此,您可以将客户机的作业保留
正在寻求您的帮助Laravel可以选择安排任务/作业: 参考: 因此,您可以将客户机的作业保留在数据库中,然后执行以下操作: 调度排队作业 作业方法可用于调度排队作业。此方法提供了一种方便的调度作业的方法,而无需使用call方法手动创建闭包以将作业排队:
$schedule->job(new ClientJob)->everyFiveMinutes();
// Dispatch the job to the "clientjob" queue...
$schedule->job(new ClientJob, 'clientjob')->everyFiveMinutes();
或
调度Shell命令
exec方法可用于向操作系统发出命令:
$schedule->exec('node /home/forge/script.js')->everyFiveMinutes();
最后,我找到了解决问题的办法 我们不能以我想要的方式扩展后台工作。这需要我从一个完全不同的角度来研究解决方案 我的问题的理想解决方案是,我应该生成SQS消息(有效负载描述租户id、需要执行的作业和任何附加参数),对应于设置间隔上的租户数量,并将其排队 例如,如果我有100个租户,并且我希望每小时运行一次“作业1”,那么主应用程序将生成100条SQS消息,并每小时在特定的SQS队列中对其进行排队。它将为每个租户提供15种不同的工作 另一方面,监听SQS队列的可伸缩AWS Lambda函数将拾取有效负载,并基于有效负载所携带的数据执行预期任务 但不幸的是,我的专长在于PHP/Laravel技术,它仍然不在AWS Lambda堆栈中。因此,我想出了如下解决方法 我用我的PHP/Laravel应用程序构建了一个Docker映像,并将其放在AmazonECS(EC2容器服务)中。尽管如此,我仍然有AWS Lambda函数,但这次它充当docker容器的触发器。Lambda拾取一条SQS消息,处理负载,并基于我的Docker映像在ECS上生成一个Docker容器。我从下面的文章中得到了一些想法,从而得出了这个解决方案
这并不能解决需要执行的数千项任务,无论你的工作过于复杂还是你没有很好地解释你的问题。您只需要使用一个简单的
foreach($tenant中的tenant){do_job1($tenant);do_job2($tenant);do_jobn($tenant)}每5分钟安排一个任务即可
。。。亲爱的Mikk3IRo,每个租户需要执行15个不同的后台作业。随着租户数量的增加,背景工作岗位也会增加。您所建议的将在单片服务器上工作,但不能很好地扩展。我希望你明白了。