【问题标题】:Apparently random 503 status code response of a REST service with Node.js显然,带有 Node.js 的 REST 服务的随机 503 状态代码响应
【发布时间】:2018-01-30 18:31:29
【问题描述】:

我有一个由 Node.js v8.9.4 和 Hapi 开发的 REST API:

[GET] /api/v1/idds/:idd_id/item

服务在 mongoDB 数据库上执行查找:

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 遇到了同样的问题。

这可能是什么原因?

【问题讨论】:

  • 您的应用程序日志中有什么?服务器上有503的证据吗? ELB 日志呢?必须有一个解释。

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


【解决方案1】:

来自文档:https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/ts-elb-error-message.html

HTTP 503:服务不可用 说明:表明是负载均衡器或已注册的实例导致错误。

原因 1:负载均衡器容量不足,无法处理请求。

解决方案 1:这应该是暂时性问题,持续时间不应超过几分钟。如果仍然存在,请前往 AWS 支持中心寻求帮助。

原因 2:没有注册实例。

解决方案 2:在您的负载均衡器配置为响应的每个可用区中注册至少一个实例。通过查看 CloudWatch 中的 HealthyHostCount 指标来验证这一点。如果您无法确保在每个可用区中都注册了一个实例,我们建议启用跨可用区负载均衡。有关更多信息,请参阅为您的 Classic Load Balancer 配置跨区域负载平衡。

原因 3:没有健康的实例。

解决方案 3:确保您的负载均衡器配置为响应的每个可用区中都有健康的实例。通过查看 CloudWatch 中的 HealthyHostCount 来验证这一点。

【讨论】:

  • 当应用程序在 Azure 上的同一 VM 上运行时,也会出现同样的问题。我认为这不是 AWS 配置的问题
猜你喜欢
  • 2020-06-04
  • 1970-01-01
  • 2023-03-04
  • 2018-02-25
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-28
相关资源
最近更新 更多