Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在多租户应用程序中创建计划作业_Php_Laravel_Amazon Web Services_Cloud_Scheduled Tasks - Fatal编程技术网

Php 在多租户应用程序中创建计划作业

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/PHP构建一个多租户web应用程序,最终将作为SaaS托管在AWS上。我有大约15-20个不同的背景工作,需要安排每个租户。这些工作也需要每5分钟解雇一次。因此,100名租户需要解雇的工作岗位数量大约为2000个。要实现这一目标,我还有两个挑战

  • 是否有一个云解决方案可以自动分配和管理计划作业的负载
  • 如果有一个在那里,我们如何能够在运行中创建15个以上的计划作业?有API可用吗

  • 正在寻求您的帮助

    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个不同的后台作业。随着租户数量的增加,背景工作岗位也会增加。您所建议的将在单片服务器上工作,但不能很好地扩展。我希望你明白了。