Vertx-java-HttpClient:如何导出 maxPoolSize 和 maxWaitQueueSize 值及其影响

Vertx-java-HttpClient: How to derive maxPoolSize and maxWaitQueueSize values and their impact

我在 vertx java 中创建了一个 java 后端服务。我使用 httpClient(io.vertx.core.http.HttpClient) 并启用 连接池 来连接到外部服务。我排除了 50 的吞吐量。对于我的服务的每个请求,我都需要连接到外部服务。我的服务的平均响应时间是 4 秒,外部服务大约是 3 秒。

现在我的问题是

  1. 如何导出 HttpClient 的 maxPoolSizemaxWaitQueueSize 值?
  2. maxPoolSizemaxWaitQueueSize 值对内存和 cpu 有何影响?
  3. 我可以设置为 maxPoolSizemaxWaitQueueSize 的最大值是多少?
  4. 我还应该使用 HttpClientsetPipelining 选项吗?

首先,请注意 maxPoolSize 适用于每个目的地。因此,如果您想要不同的池大小,请为您的后端创建不同的 HttpClient

然后,除非您在受限环境中工作,否则我建议将 maxWaitQueueSize 保留为默认值,即 -1(无限制)。考虑到您期望的负载,内存中队列的大小应该相对较小。

要确定池大小值,您可以使用 Little's law。要支持平均 3 秒服务时间的 50 req/sec 吞吐量,您需要一个包含 150 个连接的池。

您可以为 maxPoolSize 设置的最大值取决于您系统的配置方式。特别是,您需要配置打开文件描述符的最大数量。

对于您的用例,我认为您应该避免启用流水线。首先,并非所有 HTTP 服务器都正确支持它。其次,如果服务时间在 0-3 秒之间变化,后端可能会保留响应,因为管道中的先前请求尚未处理(队头阻塞)。