2 回答

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

TA貢獻1799條經(jīng)驗 獲得超8個贊
Laravel 可以選擇安排任務(wù)/作業(yè):
參考:https ://laravel.com/docs/6.x/scheduling
這樣您就可以將客戶的工作保留在數(shù)據(jù)庫中,而不是像下面這樣:
調(diào)度排隊 的作業(yè) job 方法可用于調(diào)度排隊的作業(yè)。該方法提供了一種方便的方法來調(diào)度作業(yè),而無需使用 call 方法手動創(chuàng)建閉包來對作業(yè)進行排隊:
$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)注
- 136 瀏覽
添加回答
舉報