我有一个由Node.js v8.9.4与Hapi开发的REST API:
[GET] /api/v1/idds/:idd_id/item
服务在mongoDB数据库上执行find:
function findOneWithItem(id, next) {this
.findOneById(id)
.populate('itemId')
.exec(function(err, idds) {
if (err) {
console.error(chalk.bgRed.white(err));
return next(boom.badImplementation());
}
if (!idds) {return next(boom.notFound(errors.code400.missingResource('Idd')));} return next(null, idds);});}
该应用程序部署在AWS上的Ubuntu VM上。 在几小时后第一次调用该服务时,日志显示一个http状态为503的响应。在第一次调用之后,该服务再次正常工作。我们在Azure上部署的应用程序和VM遇到了同样的问题。
这可能是什么原因?
答案 0 :(得分:0)
来自文档:https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/ts-elb-error-message.html
HTTP 503:服务不可用 说明:表示负载均衡器或已注册的实例导致错误。
原因1:负载均衡器中的容量不足以处理请求。
解决方案1:这应该是一个短暂的问题,不应该持续超过几分钟。如果仍然存在,请访问AWS Support Center以获取帮助。
原因2:没有注册实例。
解决方案2:在负载均衡器配置为响应的每个可用区中至少注册一个实例。通过查看CloudWatch中的HealthyHostCount指标进行验证。如果无法确保在每个可用区中注册实例,我们建议启用跨区域负载平衡。有关详细信息,请参阅为经典负载均衡器配置跨区域负载平衡。
原因3:没有健康的实例。
解决方案3:确保您的负载均衡器配置为响应的每个可用区中都有健康的实例。通过查看CloudWatch中的HealthyHostCount来验证这一点。