0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravel Job並列処理|同時実行問題を解消する

Last updated at Posted at 2025-05-13

はじめに

実務で経験した課題を記事で記録します。

サーバ1台で稼働している環境での記述です。
スケーラブルなサーバ環境では今回の記事を参考すると想定外の動作につながる可能性が高いです⚠️

背景

他社の広告を配信した際は、他社にImpressionを通知する必要があります。
外部Apiをコールするため、通信に時間がかかるためLarvel Jobを利用してバックグラウンドで実行する設計をしました。

image.png

課題

  1. 外部apiをコールするJobなのでボトルネックになる可能性が高い
  2. LaravelのJobを並列処理すると同時実行問題が発生する(同じJobを複数回実行してしまう)

工夫:並列処理の設定をする

php artisan queue:work --queue=send_impression
php artisan queue:work --queue=send_impression
php artisan queue:work --queue=send_impression

上記のようにキューワーカーを複数実行することで並列処理ができます。
ですが、同時に同じJobを同時実行する問題が発生します。

そもそもキューワーカーが各々異なるキューを参照するようにすればどうかな?
という考えからキューを分割する設計を考案しました。

php artisan queue:work --queue=send_impression1
php artisan queue:work --queue=send_impression2
php artisan queue:work --queue=send_impression3

上記のように設定することで同時に同じJobを取得する可能性を0にすることができました。

処理のイメージ

キュー分割前

image.png

キュー分割後

image.png

キュー分散で達成できたこと

  • 並列処理によるパフォーマンス向上
  • スケーラビリティの向上
  • 同時処理問題の解消

以上、ここまで読んで頂いた皆さんありがとうございます!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?