为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
ITMISS 2022-08-05 15:57:07
我正在使用Laravel / PHP构建一个多租户Web应用程序,该应用程序最终将作为SaaS托管在AWS上。我有大约 15-20 个不同的后台作业需要为每个租户进行计划。这些工作也需要每5分钟解雇一次。因此,需要为100个租户解雇的工作岗位数量约为2000个。在实现这一目标方面,我还有2个挑战是否有自动分配和管理计划作业负载的云解决方案?如果有一个在那里,我们如何在飞行中创建这15个以上的计划工作?是否有可用的 API?寻求您的帮助
查看完整描述

2 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

最后,我找到了解决问题的方法。

我们无法以我想要的方式缩放后台作业。这需要我从一个完全不同的角度来研究解决方案。

我的问题的理想解决方案是,我应该生成与设置间隔内的租户数量相对应的 SQS 消息(具有描述租户 ID 的有效负载、需要执行的作业和任何其他参数)并将其排队。

例如,如果我有 100 个租户,并且我想每次运行“作业 1”,则主应用程序将生成 100 条 SQS 消息,并每小时将其排队到特定的 SQS 队列中。它将对我每个租户的所有15个不同的工作执行相同的操作。

另一方面,侦听 SQS 队列的可扩展 AWS Lambda 函数将拾取有效负载,并根据有效负载携带的数据执行预期任务。

但不幸的是,我的专长在于PHP / Laravel技术,这仍然不在AWS Lambda堆栈中。因此,我想出了一个解决方法,如下所示。

我使用我的 PHP/Laravel 应用程序构建了一个 Docker 映像,并将其放置在 Amazon ECS(EC2 容器服务)中。尽管如此,我还是有AWS Lambda函数,但这次它充当了我的Docker容器的触发器。Lambda 选择一条 SQS 消息,处理有效负载,并根据我的 Docker 映像在 ECS 上生成一个 Docker 容器。我从下面的文章中得到了一些想法来达到这个解决方案。

https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aws-lambda/


查看完整回答
反对 回复 2022-08-05
?
HUX布斯

TA贡献1876条经验 获得超6个赞

Laravel可以选择安排任务/作业:


参考: https://laravel.com/docs/6.x/scheduling


因此,您可以将客户的工作保留在数据库中,而不是像下面这样做:


计划排队的作业作业方法可用于计划排队作业。此方法提供了一种方便的方法来计划作业,而无需使用调用方法来手动创建闭包来对作业进行排队:


$schedule->job(new ClientJob)->everyFiveMinutes();


// Dispatch the job to the "clientjob" queue...

$schedule->job(new ClientJob, 'clientjob')->everyFiveMinutes();


调度命令行管理程序命令


exec 方法可用于向操作系统发出命令:


$schedule->exec('node /home/forge/script.js')->everyFiveMinutes();


查看完整回答
反对 回复 2022-08-05
  • 2 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号