我在vertx java中创建了一个java后端服务。我使用httpClient(io.vertx.core.http.HttpClient
)和启用连接池连接到外部服务。我不包括吞吐量50。对于对我的服务的每个请求,我都需要连接到外部服务。我的服务的平均响应时间为4秒,外部服务的响应时间约为3秒。
现在我的问题是
maxPoolSize
和maxWaitQueueSize
值?maxPoolSize
和maxWaitQueueSize
值对内存和CPU有什么影响?maxPoolSize
和maxWaitQueueSize
的最大值是多少?setPipelining
的HttpClient
选项吗?首先,请注意maxPoolSize
适用于每个目的地。因此,如果您想要不同的池大小,请为后端创建不同的HttpClient
。
然后,除非您在受限的环境中工作,否则我建议将maxWaitQueueSize
保留为默认值,即-1
(无界)。给定您期望的负载,内存中队列的大小应该相对较小。
要确定池大小值,可以使用Little's law。要支持平均50秒的服务时间和50 req / sec的吞吐量,您需要150个连接池。
您可以为maxPoolSize
设置的最大值取决于系统的配置方式。特别是,您需要配置打开文件描述符的最大数量。
对于您的用例,我相信您应该避免启用管道。首先,并不是所有的HTTP服务器都正确地支持它。其次,如果服务时间在0-3秒之间变化,则后端可能会保留响应,因为尚未处理管道中的先前请求(行头阻塞)。