pm2 cluster启动node,同一请求接收多次。

有个困惑。
小弟用pm2的cluster模式启动node 作为webserver。因为服务器是24核的,所以有24个进程。
请输入图片描述

以下是截取的一些http请求日志。明显看到同一个请求被log了3次。

[2014-08-18 11:06:04.579] [INFO] stockHero - 122.195.242.228 - - "POST /api/v1/user/order/140442/cancel HTTP/1.1" 200 2 ""
[2014-08-18 11:06:04.581] [INFO] stockHero - 122.195.242.228 - - "POST /api/v1/user/order/140442/cancel HTTP/1.1" 200 2 ""
[2014-08-18 11:06:04.581] [INFO] stockHero - 111.175.188.197 - - "POST /api/v1/user/order/143183/cancel HTTP/1.1" 200 2 ""
[2014-08-18 11:06:04.582] [INFO] stockHero - 122.195.242.228 - - "POST /api/v1/user/order/140442/cancel HTTP/1.1" 200 2 ""


[2014-08-18 11:06:04.726] [INFO] stockHero - 223.104.6.11 - - "POST /api/v1/stock/sh600667/buy HTTP/1.1" 200 470 ""
[2014-08-18 11:06:04.731] [INFO] stockHero - 223.104.6.11 - - "POST /api/v1/stock/sh600667/buy HTTP/1.1" 200 470 ""

这个接口执行的是一个mysql事务(事务逻辑是在nodejs里面写的)。按道理是只能执行一次,先到先得。但这个确可以执行多次,所以导致数据逻辑出错。
我自己这边无论如何模拟,也不能重现这个问题。所以感到很疑惑。

这是我自己尝试同时发送3个请求的结果。明显其他两个是rollback的。尝试过锁表进行测试,然后再unlock,结果也是一样。
请输入图片描述

而这种情况是偶尔发生的。大概千分一的机会吧。所以一直定位不出问题所在。哪位大牛愿意指点下呢,十分感谢!

阅读 11.4k
4 个回答
新手上路,请多包涵

pm2版本和node版本提供下,被log多次应该和启动多进程没有关系。pm2的集群只支持V.11及以上版本。以下不支持。

有类似的问题出现,一次请求在4个进程的情况下就会查询4次数据库,响应4次,导致服务器挂了,这是什么原因?

新手上路,请多包涵

同问,使用schedule模块时,几个进程会重复执行几次

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题