Можно включить Keep-alive с балансировщиком нагрузки?

Я пытаюсь оптимизировать свое веб-приложение, используя API-интерфейс Google Page Speed, который подчеркнул отсутствие "Keep-alive" в моих заголовках HTTP-ответа в качестве основной слабой скорости страницы.

В разговоре с моими back-end разработчиками и администраторами sys они сказали мне, что использование Keep-alive на сайте невозможно, потому что мы используем балансировщик нагрузки.

Мне интересно, это точно? Существуют ли балансиры нагрузки, поддерживающие Keep-alive?

Мне кажется странным, что API скорости страницы будет жаловаться на Keep-alive, если бы это было невозможно использовать с балансировщиками нагрузки, потому что я бы предположил, что большое количество приложений и больших сайтов используют балансировщики нагрузки.

Спасибо!

Ответ 1

Я не знаю, какой у вас балансировщик нагрузки... но я не думаю, что это предотвратит использование связей keep-alive.

Балансировщик нагрузки будет обрабатывать каждое входящее соединение на одном из серверных серверов. Теперь для каждого объекта браузеру необходимо создать новое соединение, чтобы получить этот объект (например, все мелкие изображения). Установление и закрытие TCP-соединений занимает некоторое время. Вот почему Google Page Speed ​​предлагает включить поддержку. Другой вариант - поместить все ваши маленькие изображения в одно большое изображение и использовать css спрайты, чтобы отобразить его часть в разных местах вашей страницы.

Но вернемся к балансировщику нагрузки. Если у вас есть балансировщик сетевой нагрузки, он должен работать без каких-либо вопросов - он просто перенаправляет входящее TCP-соединение на один из серверных серверов. Если у вас есть балансировщик нагрузки HTTP, он будет принимать соединение, прочитать запрос, отправить запрос на сервер резервного копирования, дождаться ответа и отправить ответ обратно в браузер. Если вы включите keep-alive, балансировщик нагрузки должен переслать следующий запрос, который он получает по тому же соединению.

Для динамических страниц вам не нужно поддерживать жизнь. Keep-alive в основном полезен для статического контента (js, images, css), так как для каждой html-страницы у вас обычно более 10 статических объектов. Поэтому я бы предложил продолжить обслуживание html через этот балансировщик нагрузки и обслуживать статический контент по другому имени хоста (static.example.com).