Node.js OpenShift HAProxy缩放不起作用

Node.js OpenShift HAProxy缩放不起作用,node.js,openshift,scaling,haproxy,Node.js,Openshift,Scaling,Haproxy,我一直在尝试让OpenShift的HAProxy缩放与ny NodeJS Express 4应用程序一起工作(它本质上是一个REST API),但我运气不太好 我使用的是loader.io的压力测试工具,每分钟只有100个用户(从0增加到100),因为我相信至少NodeJS/Express应该能够处理这个问题。现在,这确实在60秒内生成了大约10-20k个请求,但仍然存在 在请求开始冲击服务器之后,我可以看到CPU上升,内存保持稳定,HAProxy的日志文件让我知道它即将扩展 从来没有。HAPr

我一直在尝试让OpenShift的HAProxy缩放与ny NodeJS Express 4应用程序一起工作(它本质上是一个REST API),但我运气不太好

我使用的是loader.io的压力测试工具,每分钟只有100个用户(从0增加到100),因为我相信至少NodeJS/Express应该能够处理这个问题。现在,这确实在60秒内生成了大约10-20k个请求,但仍然存在

在请求开始冲击服务器之后,我可以看到CPU上升,内存保持稳定,HAProxy的日志文件让我知道它即将扩展

从来没有。HAProxy在扩展之前崩溃,然后我失去了与OpenShift主机的SSH连接。不过过了一会儿它又回来了

在某一点上,我确实看到它达到了默认的128连接限制,然后尝试启动另一个齿轮,但由于请求不断出现,我猜它就是无法处理它

起初,我认为这是因为使用了一个小齿轮,因为我正在运行“top”,看到CPU负载急剧增加,最终我断开了连接

我删除了应用程序,转而使用small.highcpu设备(每小时收费)

当它应该扩展时仍然崩溃(并发用户少于100个)

尽管small.highcpu gear确实做了一些不同的事情,因为在它重新启动后,它添加了一个新的gear,但它并没有缩小(即使所有流量都已停止),所以我必须手动缩小

如果我保持第二档,并尝试在1分钟内再次对100个用户进行压力测试,HAProxy仍然会下降(内存使用和CPU似乎正常),不久之后我就会失去SSH连接。而且,这一次,它本身并没有出现。我在我的NodeJS应用程序中还收到以下错误:

{ [Error: socket hang up] code: 'ECONNRESET' }
{ [Error: socket hang up] code: 'ECONNRESET', sslError: undefined }
如果我在这之后手动重启HAProxy(我有点不得不这么做,因为它没有启动),我可以看到本地档位已关闭,而第二档位已打开,这意味着我的NodeJS应用程序在第一档位崩溃,但在第二档位保持在线

这真的是故意的行为吗?在处理NodeJS和HAProxy时,我应该做些不同的事情吗

如果我甚至不能处理每分钟100个用户的话,我真的无法证明为这样的服务付费是合理的,因为我确信我最终会达到远远超过100的峰值

更新:这里有一个loader.io图表/报告,它显示了HAProxy放弃的时间:

更新2:我尝试使用Blitz而不是loader.io,只是为了确定HAProxy什么时候疯了。闪电战以12千次点击、26千次错误和4千次超时而告终

此外,HAProxy倒下了,似乎再也不会回来了。这一次我决定等待,几分钟后,当地的装备确实恢复了。不过,它没有带来任何额外的齿轮

以下是闪电测试发生时HAProxy告诉我的(在它崩溃之前,我断开了连接):

这里没有太多的模式,除了HAProxy没有做它应该做的事情:缩放。
我很有信心,这不是我的NodeJS应用程序的错,因为它没有报告任何错误(到日志文件或newrelic)。

您的设备内存不足,因此您的所有进程都被终止。(这就是为什么你也被踢出你的SSH会话。)当这种情况发生时,它可能会把HAXPro配置放在一个坏的状态,如果它在重新启动时不自动修复它,我会认为这是一个bug。我将此作为答案,因为这是迄今为止我发现的最接近问题的解释。我已经和RedHat的工程师谈过了,他们可以证实这一点。这似乎是由于默认的HAProxy配置,它期望连接请求逐渐扩展,所以HAProxy有时间进行扩展。在我的例子中,HAProxy因为突然出现大量请求而停机进行维护。这就是RedHat说的。我希望这不会成为生产中的一个问题,但我希望在开始的时候会有很多要求。哦,还有一件事!你会推荐使用小型高CPU设备吗?或者你认为小型设备就足够了,因为它们都不能处理这种负载?再次感谢。:)因为你有内存问题,我建议你升级到中档。此外,您可能需要调整每个GEAR的最大会话数(这控制haproxy允许每个GEAR拥有多少并发会话,并反过来决定应用程序何时放大或缩小)。如果您在开始时期望高负载,则应将应用程序的最小档位数设置为适合预期负载的适当数字(最小档位=~预期并发会话数除以每个档位的最大会话数)
==> app-root/logs/haproxy_ctld.log <==
I, [2014-10-13T07:14:48.857616 #74934]  INFO -- : add-gear - capacity: 143.75% gear_count: 1 sessions: 23 up_thresh: 90.0%

==> app-root/logs/haproxy.log <==
[WARNING] 285/071506 (74918) : Server express/local-gear is DOWN, reason: Layer7 timeout, check duration: 10002ms. 0 active and 0 backup servers left. 128 sessions active, 0 requeued, 0 remaining in queue.
[ALERT] 285/071506 (74918) : proxy 'express' has no server available!
[WARNING] 285/071511 (74918) : Server express/local-gear is DOWN for maintenance.
DEBUG: Sending SIGTERM to child...