执行许多并发的http请求会导致异常

时间:2017-10-12 11:47:48

标签: javascript node.js rest request

在研究了这些异常后,我已经尝试了很多,但到目前为止,没有一个建议的解决方案对我有帮助,因此另一个堆栈溢出。也许我错过了什么。

我正在使用'请求'模块和我有800个请求/秒可用于我想要使用的REST Api。因此,我编写了一个包装器类,其中包括所有可能的API端点的速率限制+方法。每当我尝试执行超过约100个请求/秒(作为单个实例或集群)时,我会得到如下所示的异常:

  

错误:getaddrinfo ENOTFOUND api.domain.com api.domain.com:80

     

错误:ESOCKETTIMEDOUT

     

错误:ETIMEDOUT

这些是我用于请求的默认选项:

apiRequest = request.defaults({
    headers: {
      Authorization: `Bearer ${this.apiJwt}`,
    },
    json: true,
    timeout: 6000,
    baseUrl: this.baseUrl,
    pool: { maxSockets: Infinity },
  })

// First parameter is priority, second the function to be called, 
// third parameter is the first parameter for the called function
this.limiter.schedulePriority(priority, this.apiRequest, url)

我尝试过的事情:

  1. 在我的index.js导入后立即放置process.env.UV_THREADPOOL_SIZE = 128(参见:Node.js request module getting ETIMEDOUT and ESOCKETTIMEDOUT
  2. pool: { maxSockets: Infinity }添加到默认请求选项(请参阅上面的代码段)
  3. 检查网络吞吐量约为16-25mbps,下降1mbps。我的本地主机上传了10mbps,下载了50mbps。
  4. 在8个实例的集群中启动应用程序,其中每个实例将执行100个请求/秒
  5. 我是否缺少执行那么多并发请求的东西?也许process.env.UV_THREADPOOL_SIZE没有被正确应用(有没有办法检查)?

0 个答案:

没有答案