2 回答

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
最后,我找到了解決我的問(wèn)題的方法。
我們無(wú)法以我想要的方式擴(kuò)展后臺(tái)作業(yè)。它要求我從一個(gè)完全不同的角度來(lái)研究解決方案。
我的問(wèn)題的理想解決方案是我應(yīng)該生成與設(shè)定間隔內(nèi)的租戶(hù)數(shù)量相對(duì)應(yīng)的 SQS 消息(帶有描述租戶(hù) ID、需要執(zhí)行的作業(yè)和任何其他參數(shù)的有效負(fù)載)并將其排隊(duì)。
例如,如果我有 100 個(gè)租戶(hù),并且我想每個(gè)我們運(yùn)行“作業(yè) 1”,主應(yīng)用程序?qū)⒚啃r(shí)生成 100 條 SQS 消息并將其排隊(duì)到特定的 SQS 隊(duì)列中。對(duì)于我每個(gè)租戶(hù)擁有的所有 15 個(gè)不同的工作,它都會(huì)做同樣的事情。
另一方面,監(jiān)聽(tīng) SQS 隊(duì)列的可擴(kuò)展 AWS Lambda 函數(shù)將獲取有效負(fù)載并根據(jù)有效負(fù)載攜帶的數(shù)據(jù)執(zhí)行預(yù)期任務(wù)。
但不幸的是,我的專(zhuān)長(zhǎng)在于 PHP/Laravel 技術(shù),這仍然不在 AWS Lambda 堆棧中。因此,我想出了一個(gè)解決方法如下。
我使用我的 PHP/Laravel 應(yīng)用程序構(gòu)建了一個(gè) Docker 映像,并將其放置在 Amazon ECS(EC2 容器服務(wù))中。盡管如此,我仍然有 AWS Lambda 函數(shù),但這次它充當(dāng)了我的 docker 容器的觸發(fā)器。Lambda 選擇一條 SQS 消息,處理有效負(fù)載并根據(jù)我的 Docker 映像在 ECS 上生成一個(gè) Docker 容器。我從下面的文章中得到了一些想法來(lái)得出這個(gè)解決方案。
https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aws-lambda/

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個(gè)贊
Laravel 可以選擇安排任務(wù)/作業(yè):
參考:https ://laravel.com/docs/6.x/scheduling
這樣您就可以將客戶(hù)的工作保留在數(shù)據(jù)庫(kù)中,而不是像下面這樣:
調(diào)度排隊(duì) 的作業(yè) job 方法可用于調(diào)度排隊(duì)的作業(yè)。該方法提供了一種方便的方法來(lái)調(diào)度作業(yè),而無(wú)需使用 call 方法手動(dòng)創(chuàng)建閉包來(lái)對(duì)作業(yè)進(jìn)行排隊(duì):
$schedule->job(new ClientJob)->everyFiveMinutes();
// Dispatch the job to the "clientjob" queue...
$schedule->job(new ClientJob, 'clientjob')->everyFiveMinutes();
或者
調(diào)度 Shell 命令
exec 方法可用于向操作系統(tǒng)發(fā)出命令:
$schedule->exec('node /home/forge/script.js')->everyFiveMinutes();
- 2 回答
- 0 關(guān)注
- 151 瀏覽
添加回答
舉報(bào)