2 回答

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/

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();
- 2 回答
- 0 關注
- 134 瀏覽
添加回答
舉報