環境:
- Ubuntu 12.04 デスクトップ & サーバー
- PHP 5.3.10
- Gearman (libgearman 1.1.5 と PHP 拡張機能 1.1.1)
- LAN上の複数のサーバー
私はしばらくの間、分散プロセスに取り組んできました。これらのツールのほとんどは、DB アクセスを必要とします。最終的に、これはMySQLが圧倒されるため、サーバー/リソースの問題につながりました(私が知る限り).
私は多くのソリューションを試しましたが、今は Gearman を試しています。クエリがワーカーに送信され、クライアントに正しい応答が返されます。(エラーを返すことはまだテストしていません。)
私の問題は、テスト コードに 3 つの SQL ステートメント (すべて選択) があることです。このテスト スクリプト 2 を実行すると、おそらく 5 回のうち 4 回、またはクエリが返されるまでに 3 秒かかり、1 回は完了するまでに 0.01 秒かかりません。このスクリプトでの 5 回目の試行では、3 つのクエリすべてに 3 秒かかります。0.01 秒未満のクエリは、多くの場合、最後のクエリの倍になりますが、常にではありません。また、同じクエリを実行する直接 DB 接続があり、それらはすべて 0.002 秒の範囲で返されます。
この動作は、1 つまたは最大 4 つのワーカーを実行しても変わらないようです。クライアントは doHigh を使用しています。
具体的には、最近のテスト実行からの時間 (秒または Unix エポック時間) を次に示します。
- ワーカーの実行時間: 0.00066
- クライアント ジョブ リクエスト時間: 1380128735.505
- ワーカージョブ受信時間: 1380128744.3248
- クライアント受信結果時間: 1380128744.3262
明らかに、このリクエストには 3 秒ではなく約 9 秒かかりました。クライアントとワーカーの両方が同じマシン上に存在します。ジョブ サーバーは LAN に対して開いているため、127.0.0.1 ではなく 192.168.1.XX でリッスンしています。別のマシン (より高速で、RAM が多く、負荷がほとんどない) 上のジョブ サーバーにジョブを送信すると、時間は事実上同じになります。
これは Gearman の予想される動作ですか?
ありがとう
別のフォーラムでの提案に従って、--verbose=DEBUG を使用して何が起こっているかをログに記録しました。簡単に言えば、時間のギャップが発生しているように見えます NOOP を 192.168.1... と 192.168.1... に送信しました。 Ready POLLIN -> ... 関連するログの抜粋を次に示します (より適切にフォーマットする方法を知りたいです) ):
INFO 2013-09-26 02:39:43.873141 [ main ] 192.168.1.70:39280 からの接続を受け入れました DEBUG 2013-09-26 02:39:43.873200 [ 3 ] CON ウェイクアップ イベントを受信しました -> libgearman-server/gearmand_thread.cc: 602 DEBUG 2013-09-26 02:39:43.873244 [3] setsockopt() 33 -> libgearman-server/io.cc:809 DEBUG 2013-09-26 02:39:43.873276 [3] 192.168.1.70:39280 監視中POLLIN -> libgearman-server/gearmand_thread.cc:151 INFO 2013-09-26 02:39:43.873292 [ 3 ] Gear connection made DEBUG 2013-09-26 02:39:43.873309 [ 3 ] 192.168.1.70:39280 Ready POLLIN -> libgearman-server/gearmand_con.cc:118 DEBUG 2013-09-26 02:39:43.873333 [ 3 ] 22 バイトを読み取る -> libgearman-server/io.cc:686 INFO 2013-09-26 02:39:43.873346 [ 3 ] Gear unpack DEBUG 2013-09-26 02:39:43.873363 [ 3 ] GEAR の長さ:0 gearmand_command_t: GEARMAN_COMMAND_OPTION_REQ -> libgearman-server/plugins/protocol/gear/protocol.cc:248 DEBUG 2013-09-26 02:39:43.873375 [ 3 ] OPTION_REQ 192.168.1.70:3093758901 を受け取りました -> libgearman-server/thread. cc:318 DEBUG 2013-09-26 02:39:43.873399 [3] 192.168.1.70:39280 POLLIN の監視 -> libgearman-server/gearmand_thread.cc:151 DEBUG 2013-09-26 02:39:43.873411 [proc] 192.16 .1.70:39280 パケット コマンド OPTION_REQ -> libgearman-server/server.cc:98 DEBUG 2013-09-26 02:39:43.873457 [proc] '例外' -> libgearman-server/server.cc:485 DEBUG 2013-09 -26 02:39:43.873492 [3093758901 -> libgearman-server/thread.cc:318 DEBUG 2013-09-26 02:39:43.873399 [3] 192.168.1.70:39280 POLLIN を監視中 -> libgearman-server/gearmand_thread.cc:151 DEBUG 2013-09-26 02:39:43.873411 [proc] 192.168.1.70:39280 パケット コマンド OPTION_REQ -> libgearman-server/server.cc:98 DEBUG 2013-09-26 02:39:43.873457 [proc] 'exceptions' -> libgearman-server/ server.cc:485 デバッグ 2013-09-26 02:39:43.873492 [3093758901 -> libgearman-server/thread.cc:318 DEBUG 2013-09-26 02:39:43.873399 [3] 192.168.1.70:39280 POLLIN を監視中 -> libgearman-server/gearmand_thread.cc:151 DEBUG 2013-09-26 02:39:43.873411 [proc] 192.168.1.70:39280 パケット コマンド OPTION_REQ -> libgearman-server/server.cc:98 DEBUG 2013-09-26 02:39:43.873457 [proc] 'exceptions' -> libgearman-server/ server.cc:485 デバッグ 2013-09-26 02:39:43.873492 [libgearman-server/server.cc:485 DEBUG 2013-09-26 02:39:43.873492 [libgearman-server/server.cc:485 DEBUG 2013-09-26 02:39:43.873492 [
3 ] RUN ウェイクアップ イベントを受信 -> libgearman-server/gearmand_thread.cc:607 DEBUG 2013-09-26 02:39:43.873508 [ 3 ] GEAR の長さ: 0 gearmand_command_t: GEARMAN_COMMAND_OPTION_RES -> libgearman-server/plugins/protocol/gear/ protocol.cc:274 DEBUG 2013-09-26 02:39:43.873551 [ 3 ] send() ピア 192.168.1.70:39280 への 22 バイト -> libgearman-server/io.cc:275 DEBUG 2013-09-26 02: 39:43.873565 [3] OPTION_RES を 192.168.1.70:-1201208395 に送信 -> libgearman-server/thread.cc:365 DEBUG 2013-09-26 02:39:43.873583 [3] 192.168.1.70:39280 Ready POLLIN -> libgearman -server/gearmand_con.cc:118 DEBUG 2013-09-26 02:39:43.873599 [ 3 ] 177 バイトを読み取る -> libgearman-server/io.cc:686 INFO 2013-09-26 02:39:43.873610 [ 3 ]ギアの解凍 DEBUG 2013-09-26 02:39:43.873635 [ 3 ] ギアの長さ:118 gearmand_command_t: GEARMAN_COMMAND_SUBMIT_JOB_HIGH -> libgearman-server/plugins/protocol/gear/protocol.cc:248 DEBUG 2013-09-26 02:39:43.873648 [3] SUBMIT_JOB_HIGH 192.168.1.70:3093758901 を受け取りましたcc:318 DEBUG 2013-09-26 02:39:43.873668 [3] 192.168.1.70:39280 POLLIN の監視 -> libgearman-server/gearmand_thread.cc:151 DEBUG 2013-09-26 02:39:43.873675 [proc] 192.16 .1.70:39280 パケット コマンド SUBMIT_JOB_HIGH -> libgearman-server/server.cc:98 DEBUG 2013-09-26 02:39:43.873696 [ proc ] 受信した送信、関数:db_access 一意:e692b4c2-2654-11e3-bc34-90e6baa255ea 2 つの引数 -> libgearman-server/server.cc:231 DEBUG 2013-09-26 02:39:43.873715 [ proc ] 優先度 0 のキュー 0 と制限 0 を比較 -> libgearman-server/job.cc:174 通知 2013-09-26 02:39:43.873754 [proc] 受け入れ、db_access、e692b4c2-2654-11e3-bc34-90e6baa255ea、0 -> libgearman-server/server.cc:301 DEBUG 2013-09-26 02:39 :43.873764 [
3 ] RUN ウェイクアップ イベントを受信 -> libgearman-server/gearmand_thread.cc:607 DEBUG 2013-09-26 02:39:43.873763 [4] RUN ウェイクアップ イベントを受信 -> libgearman-server/gearmand_thread.cc:607 DEBUG 2013-09 -26 02:39:43.873794 [3] ギアの長さ: 0 gearmand_command_t: GEARMAN_COMMAND_JOB_CREATED -> libgearman-server/plugins/protocol/gear/protocol.cc:274 DEBUG 2013-09-26 02:39:43.873803 [4] ギアの長さ: 0 gearmand_command_t: GEARMAN_COMMAND_NOOP -> libgearman-server/plugins/protocol/gear/protocol.cc:274 DEBUG 2013-09-26 02:39:43.873824 [ 3 ] send() ピア 192.168.1.70:39280 に 25 バイト -> libgearman-server/io.cc:275 DEBUG 2013-09-26 02:39:43.873838 [3] JOB_CREATED を 192.168.1.70:-1201208395 に送信 -> libgearman-server/thread.cc:365 DEBUG 2013-09-26 02 :39:43.873850 [ 4 ] send() 12 バイトをピア 192.168.1.70:39219 に送信 -> libgearman-server/io.cc:275 DEBUG 2013-09-26 02:39:43.873865 [ 4 ] NOOP を 192.168.1.70:-1201209827 に送信-> libgearman-server/thread.cc:365 DEBUG 2013-09-26 02:39:47.032010 [
4] 192.168.1.70:39219 Ready POLLIN -> libgearman-server/gearmand_con.cc:118 DEBUG 2013-09-26 02:39:47.032061 [4] 12 バイトを読み取る -> libgearman-server/io.cc:686 INFO 2013 -09-26 02:39:47.032074 [4] Gear unpack DEBUG 2013-09-26 02:39:47.032086 [4] GEAR length: 0 gearmand_command_t: GEARMAN_COMMAND_GRAB_JOB_ALL -> libgearman-server/plugins/protocol/gear/protocol.cc :248 DEBUG 2013-09-26 02:39:47.032098 [4] 受信 GRAB_JOB_ALL 192.168.1.70:3093757469 -> libgearman-server/thread.cc:318 DEBUG 2013-09-26 02:39:47.032119 [2.16] 18. 1.70:39219 POLLIN の監視 -> libgearman-server/gearmand_thread.cc:151 DEBUG 2013-09-26 02:39:47.032134 [proc] 192.168.1.70:39219 パケット コマンド GRAB_JOB_ALL -> libgearman-server/server.cc:98 DEBUG 2013-09-26 02:39:47。032170 [ proc ] db_access で利用可能なジョブ: 1 -> libgearman-server/gearmand_con.cc:291 DEBUG 2013-09-26 02:39:47.032200 [ proc ] 提出を減らします。パーティショナー: db_access(9) レデューサー: (0)一意: e692b4c2-2654-11e3-bc34-90e6baa255ea(36) データ サイズ (118) -> libgearman-server/server.cc:607 DEBUG 2013-09-26 02:39:47.032239 [
4 ] RUN ウェイクアップ イベントを受信 -> libgearman-server/gearmand_thread.cc:607 DEBUG 2013-09-26 02:39:47.032254 [4] GEAR の長さ: 118 gearmand_command_t: GEARMAN_COMMAND_JOB_ASSIGN_ALL -> libgearman-server/plugins/protocol/gear/ protocol.cc:274 DEBUG 2013-09-26 02:39:47.032290 [4] send() ピア 192.168.1.70:39219 に 192 バイト -> libgearman-server/io.cc:275 DEBUG 2013-09-26 02: 39:47.032303 [4] JOB_ASSIGN_ALL を 192.168.1.70:-1201209827 に送信 -> libgearman-server/thread.cc:365 DEBUG 2013-09-26 02:39:47.034398 [4] 192.168.1.70:39219 準備完了
POLLIN -> libgearman-server/gearmand_con.cc:118 DEBUG 2013-09-26 02:39:47.034416 [ 4 ] 1926 バイトを読み取る -> libgearman-server/io.cc:686 INFO 2013-09-26 02:39: 47.034427 [ 4 ] Gear unpack DEBUG 2013-09-26 02:39:47.034438 [ 4 ] GEAR length: 1900 gearmand_command_t: GEARMAN_COMMAND_WORK_COMPLETE -> libgearman-server/plugins/protocol/gear/protocol.cc:248 DEBUG 2013-09-26 02:39:47.034462 [4] WORK_COMPLETE 192.168.1.70:3093757469 -> libgearman-server/thread.cc:318 DEBUG 2013-09-26 02:39:47.034479 [4] 192.168.1.70:39219 を受け取りました-server/gearmand_thread.cc:151 DEBUG 2013-09-26 02:39:47.034485 [proc] 192.168.1.70:39219 パケット コマンド WORK_COMPLETE -> libgearman-server/server.cc:98 DEBUG 2013-09-26 02:39 :47.034526 [ 3 ] RUN ウェイクアップ イベントを受信 -> libgearman-server/gearmand_thread.cc:607 DEBUG 2013-09-26 02:39:47.034542 [ 3 ] GEAR の長さ: 1900 gearmand_command_t: GEARMAN_COMMAND_WORK_COMPLETE -> libgearman-server/plugins/protocol/ gear/protocol.cc:274 DEBUG 2013-09-26 02:39:47.034577 [ 3 ] send() ピア 192.168.1.70:39280 に 1926 バイト -> libgearman-server/io.cc:275 DEBUG 2013-09-26 02:39:47.034591 [3] WORK_COMPLETE を 192.168.1.70:-1201208395 に送信 -> libgearman-servelibgearman-server/io.cc:275 DEBUG 2013-09-26 02:39:47.034591 [ 3 ] WORK_COMPLETE を 192.168.1.70:-1201208395 に送信 -> libgearman-servelibgearman-server/io.cc:275 DEBUG 2013-09-26 02:39:47.034591 [ 3 ] WORK_COMPLETE を 192.168.1.70:-1201208395 に送信 -> libgearman-serve
r/thread.cc:365