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

dev*_*sda 8 https web-services node.js node-http-proxy

问题陈述-

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

用于http代理的库 -

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

node-http-proxy 示例 -

用示例示例解释.我们在99%的案件中面临问题 -

在此输入图像描述

我们使用100并发进行了负载/性能测试.

根据结果​​,直到95百分位,响应时间对于互联网客户来说是很好的.

但是,在99百分位数,下游服务在预期时间(~250ms)内响应.但是路由器的时间比预期多10倍(~2500毫秒).

服务信息 -

路由器和下游服务都在同一区域和同一子网中.所以,这种延迟不是因为网络.

延迟的可能性 -

  1. 某些线程在节点服务级别被阻止.这就是为什么,不能听取下游服务的回应.
  2. 在dns查找中花费更多时间.
  3. 节点级线程计数较少,这就是为什么,不能监听来自下游服务端的所有传入响应.

分析这个 -

我们在配置下面蠢蠢欲动 -

keepAlive,maxSockets,maxFreeSockets,keepAliveMsecs,日志级别.PLease check http/https代理的节点配置 - http代理配置

节点服务的代码片段 -

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);
Run Code Online (Sandbox Code Playgroud)

问题 -

  1. 我是节点服务的新手.如果你帮我用正确的值调整上面的配置,那就太棒了.如果我错过任何配置,请告诉我?
  2. 有没有办法拦截路由器机器上的网络流量,这有助于我分析上面提到的路由器响应时间的10倍延迟?
  3. 如果你知道任何分析工具(网络级别),这可以帮助我深入了解更多,请与我分享?

[更新1]

找到了一个有趣的链接 - 战争故事.

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

Bri*_*jen 1

我怀疑 http-proxy 模块是问题所在。如果同步处理请求,可能会导致 javascript 在继续处理队列中的下一个请求之前等待后端响应。我建议更改为https://www.npmjs.com/package/http-proxy-async以查看是否可以解决问题。