节点服务器的响应时间出现意外延迟

问题陈述-

我们在互联网客户端和下游服务之间使用路由器。 路由器(服务)是用Node.js编写的 其责任是将networking客户端的请求传递给相应的下游服务,并将响应返回给networking客户端。 我们在路由器级面临一些延迟。

用于http-proxy-

https://github.com/nodejitsu/node-http-proxy

节点 – http代理示例 –

用样例解释。 我们在99%的情况下面临着问题 –

在这里输入图像描述

我们做了100次并发的加载/性能testing。

根据结果​​,直到95百分位,对互联网客户的响应时间看起来很棒。

但是,在百分之九十九的情况下,下游服务在预期时间(〜250ms)内响应。 但路由器比预期的时间多了10倍(〜2500毫秒)。

服务信息 –

路由器和下游服务都在同一个区域,同一个子网。 所以,这个延迟不是因为networking。

这种延迟的可能性 –

  1. 某些线程在节点服务级别被阻塞。 这就是为什么,不能听下游服务响应。
  2. 花更多的时间在DNS查找。
  3. 节点级别线程数量less,这就是为什么不能监听来自下游服务端的所有传入响应。

为了分析这一点,

我们在configuration下面查了下来 –

keepAlive,maxSockets,maxFreeSockets,keepAliveMsecs,日志级别。 PLease检查http / https代理的节点configuration – http代理configuration

节点服务的代码片段 –

var httpProxy = require('http-proxy'); var http = require('http'); var https = require('https'); var agent = new https.Agent({ maxSockets: nconf.get(25), keepAlive: true, maxFreeSockets: nconf.get(10), keepAliveMsecs : nconf.get(5000) }); var proxy = httpProxy.createServer({ agent: agent }); var domain = require('domain'); var requestTimeout = parseInt(nconf.get('REQUEST_TIMEOUT')); process.env.UV_THREADPOOL_SIZE = nconf.get(4); 

问题-

  1. 我是节点服务的新手。 如果你能帮助我用正确的值调整上面的configuration,那将是非常棒的。 如果我错过了任何configuration,请让我知道?
  2. 有没有办法在路由器机器上拦截networkingstream量,这有助于我分析路由器响应时间上述10倍的延迟?
  3. 如果您知道任何分析工具(networking级别),这可以帮助我深入了解更多,请与我分享?

[更新1]

find一个有趣的链接 – 战争故事 。

如果我在这里错过了任何需要的信息,请让我在这里添加。

我怀疑http代理模块是问题。 如果这同步处理请求,这可能导致JavaScript等待后端响应,然后继续队列中的下一个请求。 我build议改为https://www.npmjs.com/package/http-proxy-async ,看看是否解决了这个问题。