2 回答

TA貢獻1846條經驗 獲得超7個贊
最后,我找到了解決我的問題的方法。
我們無法以我想要的方式擴展后臺作業。它要求我從一個完全不同的角度來研究解決方案。
我的問題的理想解決方案是我應該生成與設定間隔內的租戶數量相對應的 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貢獻1799條經驗 獲得超8個贊
Laravel 可以選擇安排任務/作業:
參考:https ://laravel.com/docs/6.x/scheduling
這樣您就可以將客戶的工作保留在數據庫中,而不是像下面這樣:
調度排隊 的作業 job 方法可用于調度排隊的作業。該方法提供了一種方便的方法來調度作業,而無需使用 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();
- 2 回答
- 0 關注
- 153 瀏覽
添加回答
舉報