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

在对这些例外进行研究之后,我已经尝试了很多,但是迄今为止,没有一个build议的解决scheme对我有所帮助,因此是另一个解决scheme。 也许我错过了一些东西。

我正在使用“请求”模块,我已经有800个请求/秒可用于我想要使用的REST Api。 因此我写了一个包装类,它包含所有可能的API端点的速率限制+方法。 每当我尝试执行超过~100个请求/秒(无论是单个实例还是集群),我都会收到类似这样的exception:

错误: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 (请参阅: 获取ETIMEDOUT和ESOCKETTIMEDOUT的Node.js请求模块 )
  2. 添加pool: { maxSockets: Infinity }到默认请求选项(请参阅上面的代码片段)
  3. 检查networking吞吐量约为16-25mbps,最高为1mbps。 我的本地主机上有10mbps的上传和50mbps的下载。
  4. 在8个实例的集群中启动应用程序,其中每个实例执行100个请求/秒

有什么我缺less执行这么多的并发请求? 也许process.env.UV_THREADPOOL_SIZE没有得到应用(有没有办法来检查)正确?