Пропускная способность нашего веб-приложения, по-видимому, ограничена медленными соединениями. В тестах нагрузки мы легко достигаем около 5000 запросов/с. Но на практике мы максимизируем примерно 1000 запросов/с. Сервер на самом деле не находится под серьезной нагрузкой, ни IO, ни процессор. То же самое относится к базе данных. Основное отличие состоит в том, что большинство рабочих потоков замедляются клиентами, которые не могут принять ответ достаточно быстро (часто количество ответов составляет несколько МБ).Как обрабатывать многие медленные соединения
У нас практически нет статических ресурсов. Проблема заключается в динамически создаваемом контенте. Он реализован с помощью Spring Framework. Но я думаю, что это не будет отличаться для любой другой реализации на основе сервлетов.
Итак, каковы наши варианты улучшения пропускной способности? Существует ли какое-то кеширование, которое быстро поглощает ответ, освобождает рабочие потоки, а затем асинхронно доставляет его клиенту с их скоростью?
Мы не хотим увеличивать количество потоков обработки, поскольку они поддерживают соединение с базой данных для большей части их обработки. Мы действительно ищем решение, в котором небольшое число рабочих потоков может работать на полной скорости.
Я нашел описание вашей проблемы с направлением для решения [здесь] (http://serverfault.com/a/406684). Nginx «обратный прокси» звучит [перспективным] (https://www.nginx.com/resources/admin-guide/reverse-proxy/). Если это сработает, сообщите нам в ответ на ваш собственный вопрос, возможно, мне это понадобится и в один прекрасный день. – vanOekel
Спасибо за подсказку. Да, обратное прокси nginx с включенной буферизацией похоже на то, что мы ищем. Потребуется некоторое время, чтобы настроить его и убедиться, что он увеличивает нашу пропускную способность в реальных условиях. – Codo