Vertx- java -HttpClient: как получить значения maxPoolSize и maxWaitQueueSize и их влияние - PullRequest
4 голосов
/ 11 января 2020

Я создал один java бэкэнд-сервис в vertx java. Я использовал httpClient (io.vertx.core.http.HttpClient) с пулом подключений для подключения к внешним службам. Я исключаю пропускную способность 50 . Для каждого запроса к моему сервису мне нужно подключиться к внешнему сервису. Среднее время ответа для моей службы составляет 4 секунды, а для внешней службы - около 3 секунд.

Теперь мои вопросы

  1. Как получить значения maxPoolSize и maxWaitQueueSize для HttpClient ?
  2. Как значения maxPoolSize и maxWaitQueueSize влияют на память и процессор?
  3. Какие максимальные значения можно установить на maxPoolSize и maxWaitQueueSize?
  4. Должен ли я также использовать setPipelining вариант HttpClient?

1 Ответ

3 голосов
/ 17 января 2020

Во-первых, помните, что maxPoolSize применяется к каждому пункту назначения. Поэтому, если вам нужны разные размеры пула, создайте разные HttpClient для своих бэкэндов.

Тогда, если вы не работаете в стесненных условиях, я бы рекомендовал оставить значение maxWaitQueueSize по умолчанию, которое равно -1 (неограниченный). Размер очереди в памяти должен быть относительно небольшим с учетом ожидаемой нагрузки.

Чтобы определить значение размера пула, вы можете использовать закон Литтла . Для поддержки пропускной способности 50 req / se c при среднем времени обслуживания 3 с требуется пул из 150 подключений.

Максимальное значение, которое вы можете установить для maxPoolSize, зависит от конфигурации вашей системы. В частности, вам необходимо настроить максимальное количество дескрипторов открытых файлов.

В вашем случае я считаю, что вам следует избегать включения конвейерной передачи. Во-первых, не все HTTP-серверы поддерживают это правильно. Во-вторых, если время обслуживания варьируется от 0 до 3 секунд, ответ может быть задержан серверной частью, поскольку предыдущие запросы в конвейере еще не обработаны (блокировка заголовка строки).

...