0

环境:

  • Ubuntu 12.04 桌面和服务器
  • PHP 5.3.10
  • Gearman(带有 PHP 扩展 1.1.1 的 libgearman 1.1.5)
  • 局域网上的多台服务器

我从事分布式进程已经有一段时间了。这些工具中的大多数都需要数据库访问权限。最终,由于 MySQL 不堪重负(据我所知),这导致了服务器/资源问题。

我已经尝试了许多解决方案,现在我正在尝试 Gearman。我有查询被发送给工作人员,我得到了正确的回复给客户。(我还没有测试出返回错误。)

我的问题是我的测试代码有 3 个 sql 语句 - 所有选择。当我运行此测试脚本 2 或查询需要 3 秒才能返回并且 1 需要更少的 0.01 秒来完成时,可能有 5 次中有 4 次。在第 5 次尝试使用此脚本时,所有 3 个查询都需要 3 秒。耗时少于 0.01 秒的查询通常是最后一次查询的倍数,但并非总是如此。而且我有一个执行相同查询的直接数据库连接,它们都在 0.002 秒范围内返回。

无论我运行 1 名还是最多 4 名工人,这种行为似乎都没有改变。客户端正在使用 doHigh。

具体来说,这是我最近一次测试运行的一些时间(以秒或 Unix 纪元时间为单位):

  • Worker 执行时间:0.00066
  • 客户作业请求时间:1380128735.505
  • 工人工作收到时间:1380128744.3248
  • 客户端接收结果时间:1380128744.3262

显然这个请求花了大约 9 秒而不是 3 秒。客户端和工作人员都驻留在同一台机器上。作业服务器对 LAN 开放,因此它正在侦听 192.168.1.XX 而不是 127.0.0.1。将作业发送到另一台机器上的作业服务器(更快,更多 RAM,几乎没有负载)时间实际上是相同的。

这是 Gearman 的预期行为吗?

谢谢

根据另一个论坛上的建议,我使用 --verbose=DEBUG 记录了发生的事情。长话短说,时间上的差距似乎正在发生 btwn 将 NOOP 发送到 192.168.1... 和 192.168.1... 准备好 POLLIN -> ...这是一个相关的日志摘录(希望我知道如何更好地格式化它):

信息 2013-09-26 02:39:43.873141 [主] 接受来自 192.168.1.70:39280 的连接 调试 2013-09-26 02:39:43.873200 [3] 收到 CON 唤醒事件 -> libgearman-server/gearmand_thread.cc: 602 调试 2013-09-26 02:39:43.873244 [3] setsockopt() 33 -> libgearman-server/io.cc:809 调试 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] 齿轮连接已调试 2013-09-26 02:39:43.873309 [3] 192.168.1.70:39280 就绪 POLLIN -> libgearman-server/gearmand_con.cc:118 调试 2013-09-26 02:39:43.873333 [3] 读取 22 个字节-> libgearman-server/io.cc:686 INFO 2013-09-26 02:39:43.873346 [ 3 ] 齿轮拆包 DEBUG 2013-09-26 02:39:43.873363 [ 3 ] 齿轮长度:0 gearmand_command_t: GEARMAN_COMMAND_OPTION_REQ -> libgearman-server/plugins/protocol/gear/protocol.cc:248 调试 2013-09-26 02:39:43.873375 [3] 收到 OPTION_REQ 192.168.1.70:3093758901 -> libgearman-server/thread. cc:318 调试 2013-09-26 02:39:43.873399 [ 3 ] 192.168.1.70:39280 观看 POLLIN -> libgearman-server/gearmand_thread.cc:151 调试 2013-09-26 02:39:43.873411 [proc ] 192.6 .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 DEBUG 2013-09 -26 02:39:43.873492 [3093758901 -> libgearman-server/thread.cc:318 调试 2013-09-26 02:39:43.873399 [3] 192.168.1.70:39280 观看 POLLIN -> libgearman-server/gearmand_thread.cc:151 调试 2013-09-26 02:39:43.873411 [proc] 192.168.1.70:39280 数据包命令 OPTION_REQ -> libgearman-server/server.cc:98 调试 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 调试 2013-09-26 02:39:43.873399 [3] 192.168.1.70:39280 观看 POLLIN -> libgearman-server/gearmand_thread.cc:151 调试 2013-09-26 02:39:43.873411 [proc] 192.168.1.70:39280 数据包命令 OPTION_REQ -> libgearman-server/server.cc:98 调试 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 调试 2013-09-26 02:39:43.873492 [libgearman-server/server.cc:485 调试 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() 22 bytes to peer 192.168.1.70:39280 -> 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 调试 2013-09-26 02:39:43.873583 [3] 192.168.1.70:39280 准备好 POLLIN -> -server/gearmand_con.cc:118 调试 2013-09-26 02:39:43.873599 [3] 读取 177 个字节-> libgearman-server/io.cc:686 信息 2013-09-26 02:39:43.873610 [3]齿轮拆包调试 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 调试 2013-09-26 02:39:43.873668 [ 3 ] 192.168.1.70:39280 观看 POLLIN -> libgearman-server/gearmand_thread.cc:151 调试 2013-09-26 02:39:43.873675 ​​[proc ] 192.1 .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 调试 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 调试 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() 25 bytes to peer 192.168.1.70:39280 -> libgearman-server/io.cc:275 调试 2013-09-26 02:39:43.873838 [3] 将 JOB_CREATED 发送到 192.168.1.70:-1201208395 -> libgearman-server/thread.cc:365 调试 2013-09-26 02 :39:43。873850 [ 4 ] send() 12 个字节到对等方 192.168.1.70:39219 -> libgearman-server/io.cc:275 调试 2013-09-26 02:39:43.873865 [ 4 ] 向 192.168.1.70:-1201209827 发送 NOOP -> libgearman-server/thread.cc:365 调试 2013-09-26 02:39:47.032010 [
4 ] 192.168.1.70:39219 就绪 POLLIN -> libgearman-server/gearmand_con.cc:118 调试 2013-09-26 02:39:47.032061 [4] 读取 12 个字节 -> libgearman-server/io.cc:686 INFO 2013 -09-26 02:39:47.032074 [4] 齿轮解包调试 2013-09-26 02:39:47.032086 [4] 齿轮长度:0 gearmand_command_t:GEARMAN_COMMAND_GRAB_JOB_ALL -> libgearman-server/plugins/protocol/gear/protocol.cc :248 调试 2013-09-26 02:39:47.032098 [4] 收到 GRAB_JOB_ALL 192.168.1.70:3093757469 -> libgearman-server/thread.cc:318 调试 2013-09-26 02:39:47.032119.8 [4] 1.70:39219 观看 POLLIN -> libgearman-server/gearmand_thread.cc:151 调试 2013-09-26 02:39:47.032134 [proc] 192.168.1.70:39219 数据包命令 GRAB_JOB_ALL -> libgearman-server/server.cc:98 调试2013-09-26 02:39:47。032170 [ proc ] 可用于 db_access 的作业:1 -> libgearman-server/gearmand_con.cc:291 调试 2013-09-26 02:39:47.032200 [ proc ] 发送 reduce 提交,分区程序:db_access(9) Reducer:(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 调试 2013-09-26 02:39:47.032290 [ 4 ] send() 192 字节到对等方 192.168.1.70:39219 -> libgearman-server/io.cc:275 调试 2013-09-26 02: 39:47.032303 [4] 将 JOB_ASSIGN_ALL 发送到 192.168.1.70:-1201209827 -> libgearman-server/thread.cc:365 调试 2013-09-26 02:39:47.034398 [4] 192.168.1.70:39219 就绪
POLLIN -> libgearman-server/gearmand_con.cc:118 调试 2013-09-26 02:39:47.034416 [4] 读取 1926 字节 -> libgearman-server/io.cc:686 信息 2013-09-26 02:39: 47.034427 [4] 齿轮解压调试 2013-09-26 02:39:47.034438 [4] 齿轮长度:1900 gearmand_command_t:GEARMAN_COMMAND_WORK_COMPLETE -> libgearman-server/plugins/protocol/gear/protocol.cc:248 调试 2013-09-26 02:39:47.034462 [4] 收到 WORK_COMPLETE 192.168.1.70:3093757469 -> libgearman-server/thread.cc:318 调试 2013-09-26 02:39:47.034479 [4] 192.168.1.70:39earman219 正在观看-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 调试 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() 1926 bytes to peer 192.168.1.70:39280 -> 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

4

0 回答 0