#asynchronous #io #apache-httpclient-4.x #nonblocking
#асинхронный #io #apache-httpclient-4.x #неблокирующий
Вопрос:
Я пытаюсь переключить свое приложение на асинхронную версию с клиента apache http-components. Цель состоит в том, чтобы иметь возможность обрабатывать больше исходящих подключений (в ближайшем будущем). Полезная нагрузка запросов довольно мала (<5 КБ) Количество конечных точек, которые я обнаружил, составляет около 20.
При синхронизированной версии http-клиента apache пропускная способность составляет около 200 запросов в секунду. Среднее время отклика составляет около 100 мс на запрос. Я прерываю запросы максимум через 180 мс.
После переключения на асинхронный режим время ответа увеличилось на 20 мс / запрос. Пропускная способность также снижена до 160 в секунду. Количество прерванных запросов удвоилось.
Это после значительной тонкой настройки приложения. Могу ли я что-нибудь сделать, чтобы улучшить производительность асинхронного клиента? Я установил maxConnectionsPerRoute на высоком уровне. Имейте большой пул соединений.
Существуют ли какие-либо параметры, которые являются ключевыми для получения максимальной отдачи от асинхронного клиента?
Комментарии:
1. При небольшом или среднем количестве одновременных подключений можно ожидать, что классический HttpClient будет на 10-20% быстрее по сравнению с HttpAsysncClient.
2. Сколько одновременных подключений считается малым / средним? В моем случае это около 400 запросов в секунду. Откуда берутся накладные расходы? Будет ли такое же поведение для любого асинхронного http-клиента? заранее спасибо.
3. < 500. NIO обычно имеет тенденцию работать медленнее, чем классический ввод-вывод при небольшом количестве подключений. Пожалуйста, не путайте количество запросов в секунду и одновременные подключения. Это разные показатели.
Ответ №1:
Вы забыли установить maxConnTotal?
Значение maxConnTotal по умолчанию равно 20, это глобальное ограничение.
Я забыл установить его один раз.