节点服务器

时间:2017-11-14 20:33:13

标签: node.js web-services https node-http-proxy

问题陈述 -

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

用于http代理的库 -

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

节点HTTP代理 示例 -

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

enter image description here

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

根据结果,直到95%,互联网客户端的响应时间看起来很棒。

但是,在99%的情况下,下游服务在预期时间内响应(~250ms)。但路由器占用的时间比预期多10倍(约2500毫秒)。

服务信息 -

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

延迟的可能性 -

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

    我们在下面的配置中嗤之以鼻 -

    keepAlive,maxSockets,maxFreeSockets,keepAliveMsecs,日志级别。 PLease检查http / https代理的节点配置 - http agent 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. 我是节点服务的新手。如果你帮我用正确的值来调整上面的配置,那就太棒了。如果我错过任何配置,请告诉我?
    2. 有没有办法拦截路由器机器上的网络流量,这有助于我分析上面提到的路由器响应时间延迟10次?
    3. 如果你知道任何分析工具(网络级别),这可以帮助我深入了解更多,请与我分享?
    4. [更新1]

      找到一个有趣的链接 - war-story

      如果我在此错过了任何必填信息,请让我在此处添加。

1 个答案:

答案 0 :(得分:1)

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