在 IBM Bluemix 上执行我的 node.js 应用程序期间,我偶尔会收到 502 Bad Gateway

I receive a 502 Bad Gateway occasionally during the execution of my node.js app on IBM Bluemix

我正在 运行在 Bluemix 上安装一个 node.js 应用程序,它基本上是一个 REST API,用于在 Cloudant (CouchDb) 数据库上进行 read/write 操作。 传入请求由注入到 express 框架中的 passport-http-bearer 策略中间件进行身份验证。我的应用程序使用不记名令牌来接收有关用户的信息。

目前这不是很高效(我们正在研究缓存机制),但总的来说它是有效的。当我并行发送很多请求时(例如在功能测试中),有时我会收到 502 Bad Gateway 响应而不是预期的结果,这几乎使每个测试套件都失败 运行。在我的本地部署中,它可以正常工作。

我在不可靠的网络中看到过这种情况。我会为您的推送脚本使用一些重试登录来保证部署。

@Jeff-Sloyer 在推送脚本中建议重试逻辑是正确的。此外,您应该在 Bluemix 状态页面上检查运行时的状态和正在使用的任何服务。有关您可能收到此错误的原因的更多信息,请参阅以下信息:

https://www.ng.bluemix.net/docs/troubleshoot/managingapps.html

也许您遇到了缩放问题?当您说许多并行请求时 - 服务回复时间是否有可能超过路由器对许多请求的预期(我认为是 120 秒)?

您能否尝试使用 Apache Bench 更努力地推动您的应用程序?

ab -n 10000 -c 100 -s 120 -H "Authorization: Bearer <token>" https://your-app/

然后并行检查响应,例如:

#!/bin/bash
BEARER=<your-token>
URL=<your-app>
TIMEFORMAT="TIME: %E"

while true; do R=$(time echo -e REQUEST: $(date)\nREPLY: $(curl -X GET -s --insecure --header "Accept: application/json" --header "Authorization: Bearer $BEARER" "https://$URL") 2>>trace); echo "$R" >>trace; echo $R|grep -q "502" && echo -e "Found 502 reply\n$R"; done

HP