【问题标题】:Kubernetes drops HTTP connection initialized by node.js / postgresKubernetes 丢弃由 node.js / postgres 初始化的 HTTP 连接
【发布时间】:2019-03-12 19:05:57
【问题描述】:

我有一段非常简单的用 node.js 编写的代码,它在 Kubernetes 和 AWS 上运行。该应用程序只是执行 POST/GET 请求以从其他服务创建和获取数据。服务1-->服务2->服务3

Service1 获取 post 请求并调用 service2,service2 调用 postgres DB(使用 sequlize)并创建新行然后调用 service3,service3 从 DB 中获取数据并将响应返回给 service2,service2 将响应返回给 service1。

大多数情况下它都有效,但是在 4-5 次尝试 + 并发中一次,它掉线了,我得到了超时。问题是 service1 收到了响应(根据日志和网络跟踪),但似乎连接在服务之间的某个地方断开了,我得到了超时(ESOCKETTIMEDOUT)。

  • 我尝试用 node-fetch 替换 request.js
  • 我尝试过使用 NewRelic/Elastic APM
  • 我尝试使用 node -prof 并使用 node --prof-process 对其进行分析,但没有任何结论。

Kubernetes 是否有可能断开我的连接?

【问题讨论】:

  • 你的问题太宽泛了。您能否提供有关您的 Kubernetes 集群的任何描述?另外,您能否提供集群中安装的服务和部署的配置?

标签: node.js postgresql kubernetes


【解决方案1】:

如果不进行调试就很难说,但是由于当您添加更多负载 + 并发性时某些连接会断开,因此您可能需要更多的副本在您的 Kubernetes deployments 上,并可能在您的容器 pod 规格上调整 Resources

如果是这种情况,您还可以配置 HPA(水平 Pod 自动缩放器)来处理您的负载。

【讨论】:

  • 谢谢,没有负载,服务器 CPU 和内存不足。这是我在空闲套接字上发生 SOCKET ERROR: read ECONNRESET Error: read ECONNRESET at _errnoException (util.js:1026:11) at TCP.onread (net.js:606:25)"
猜你喜欢
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 2017-08-17
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 2016-02-09
相关资源
最近更新 更多