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,结果也是一样。

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

查看回复