При работе с мобильными клиентами очень часто возникают многосекундные задержки при передаче HTTP-запросов. Если вы обслуживаете страницы или службы из предварительно разветвленного Apache, дочерние процессы будут привязаны на несколько секунд к обслуживанию одного мобильного клиента, даже если логика вашего сервера приложений выполняется за 5 мс. Я ищу HTTP-сервер, балансировщик или прокси-сервер, который поддерживает следующее:
Приходит запрос на прокси. Прокси начинает буферизовать в ОЗУ или на диске запрос, включая заголовки и тела POST/PUT. Прокси НЕ открывает соединение с внутренним сервером. Это, пожалуй, самая важная часть.
Прокси-сервер прекращает буферизацию запроса, когда:
- A size limit has been reached (say, 4KB), or
- Запрос получен полностью, заголовки и тело
Только теперь, когда (часть) запроса находится в памяти, открывается соединение с серверной частью, и запрос ретранслируется.
Серверная часть отправляет ответ. Опять же, прокси-сервер начинает немедленно буферизировать его (до более щедрого размера, скажем, 64 КБ).
Поскольку прокси-сервер имеет достаточно большой буфер, внутренний ответ полностью сохраняется на прокси-сервере в течение нескольких миллисекунд, и внутренний процесс/поток может обрабатывать больше запросов. Внутреннее соединение немедленно закрывается.
Прокси-сервер отправляет ответ мобильному клиенту настолько быстро или медленно, насколько это возможно, без подключения к бэкэнду, который связывает ресурсы.
Я почти уверен, что вы можете сделать 4-6 со Squid, а nginx, кажется, поддерживает 1-3 (и выглядит довольно уникальным в этом отношении). Мой вопрос: есть ли какой-либо прокси-сервер, который сопереживает этим возможностям буферизации и не-открытия-соединений до готовности? Может быть, есть просто немного конфигурации Apache, которая делает это поведение буферизации тривиальным? Кто-нибудь из них говорил, что это не динозавр, как Squid, и что он поддерживает бережливую однопроцессную, асинхронную модель выполнения, основанную на событиях?
(Сайдерант: я бы использовал nginx, но он не поддерживает фрагментированные тела POST, что делает его бесполезным для обслуживания мобильных клиентов. Да, дешевые 50-долларовые телефоны любят фрагментированные POST... вздох)