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

Vai*_*aut 4 java connection-pooling vert.x vertx-httpclient

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

现在我的问题是

  1. 如何为 HttpClient派生maxPoolSizemaxWaitQueueSize取值?
  2. 对内存和cpu有什么影响maxPoolSizemaxWaitQueueSize价值?
  3. 我可以设置为maxPoolSize和的最大值是maxWaitQueueSize多少?
  4. 我还应该使用setPipelining选项HttpClient吗?

tse*_*ont 6

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

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

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

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

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