显然,随Node.js的REST服务的随机503状态代码响应

时间:2018-01-30 09:45:16

标签: node.js mongodb rest amazon-web-services

我有一个由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遇到了同样的问题。

这可能是什么原因?

1 个答案:

答案 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来验证这一点。