ホームページ  >  記事  >  バックエンド開発  >  Laravelキューの詳細

Laravelキューの詳細

WBOY
WBOYオリジナル
2016-06-23 13:29:25924ブラウズ

原文 http://huoding.com/2015/07/31/457

私はシンプルさを主張するので、「Laravel」などのいわゆる「重量級」フレームワークはすべて嫌いです。時にはこの憎しみは被害妄想のレベルにまで達し、履歴書に「Laravel に堪能」などと書かれているのを見たら、迷わずその候補者を合格させてしまうほどです。しかし今では、私が「Laravel」が少し好きであることを認めますが、パフォーマンスが依然として避けられない欠点ではありますが、そのパフォーマンスのボトルネックに触れることができる Web サイトがどれだけあるでしょうか。また、この記事で説明したキューなど、その豊富なコンポーネントにより、開発者は実際に多くの時間を節約できます。

Laravel でキュー関数を呼び出すのは非常に簡単です。詳細については、公式ドキュメントを参照してください:

<?php \Queue::pushOn('mail', new \App\Commands\Mail($data)); ?>

キューには、同期、データベース、Redis、Beanstalk などのさまざまなドライバーが含まれています。その中でも、同期は一見奇妙に思えるかもしれませんが、実際には開発やテストの段階では非常に便利です。また、データベース、Redis などのソリューションはどちらかというとシミュレーションに近いため、現時点では Beantalk が最適です。もちろん、nsq などのキューと比較すると、明らかに機能的には劣りますが、Beantalk はシンプルで使いやすいです。

Laravel のキュー コンシューマーには、queue:listen と queue:work という 2 つの方法があります。最初の方法は、非効率であるだけでなく、可能であるため、なぜ存在するのかさえ理解できません。詳細については、「Laravel キューによって発生するアラーム」を参照してください。

queue:work メソッドを選択したら、適切に設定されていないと問題が発生する可能性のあるデフォルト値がいくつかあることに注意する必要があります:

  • Delay: タスクが失敗すると遅延します。再実行する前に数秒間待ってください。このときのデフォルト値は「0」で、遅延なしを意味します。通常、これは良い選択ではありません。たとえば、ネットワークが不安定な場合、一度失敗すると、遅滞なく再試行してもおそらく失敗します。 「1」に設定することを推奨します。
  • スリープ: 有効なタスクがない場合、システムは数秒間一時停止してから、再度チェックします。今回のデフォルト値は「3」です。ただし、この場合、新しいタスクが突然来ると、応答を開始する前に 3 秒間停止することがあります。これは少し長すぎるように思えます。 「1」に設定することを推奨します。
  • 試行: タスクが失敗した場合は、数回再試行してください。この数値のデフォルト値は「0」ですが、これは再試行ではなく試行を続けることを意味します。場合によっては、問題が深刻な場合、再試行を繰り返すことは無限ループに相当します。 「3」に設定することをお勧めします。

本番環境では、キューが混雑しているかどうかを監視することが見落とされがちですが、Beanstalk を例に挙げると、キューのステータスを簡単にクエリできる stats コマンドが提供されています。 、この出力には多くのコマンドがありますが、どれが輻輳に関連しているかをどのように判断すればよいでしょうか?最も簡単な方法は、人為的にいくつかの輻輳障害を作成し、その前後の結果を比較して違いを見つけることです。私の実験の結果は次のとおりです。 current-jobs -reserved

current-jobs-layed

    current-jobs-buried
  • zabbix を通じて Beanstalk で輻輳が発生しているかどうかを簡単に監視できます:
  • Beanstalk ジョブ
  • 詳細については説明しません。具体的な設定方法は公式サイトのUserParametersの説明を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。