Нужно ли использовать keep-alive между reverse proxy (nginx) и backend сервером?

Есть веб сервер бекенда, перед ним стоит nginx. Имеет ли смысл использовать между ними keep-alive? Интересует ответ с точки зрения производительности и затрат ресурсов обоих серверов.

Размышления:
- При включенном keep-alive должно плодиться меньше соединений, тем более что через несколько постоянных соединений должны пролезать много запросов от многих пользователей.
- С другой стороны висячие keep-alive соединения расходуют ресурсы как операционки, так и обоих веб серверов.
- Предположим что бекенд будет отдавать контент медленно (я не знаю по каким причинам, но вдруг), тогда количество keep-alive соединений может сильно вырасти и остаться висеть все время их существования. Не приведет ли это к какому-нибудь неприятному эффекту? Понятно, что если их будет слишком много, то новые соединения не будет создаваться, но без keep-alive и с медленным бекендом их ведь так же будет очень много? Возможно, нужно использовать keep-alive с небольшим таймаутом (пару секунд)?
  • Вопрос задан
  • 6971 просмотр
Решения вопроса 1
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
Зависит от. Если у вас большой запас по памяти/процессору - включайте (само собой, покрутив кол-во воркеров бэкэнда до нужной циферки).
Если памяти мало - то keep-alive не будет давать "лишним" процессам бэкэнда (особенно, если это apache2) завершаться и высвобождать память. Например, без keep-alive вполне себе можно отвечать достаточно бодро двумя-тремя процессами апача, а с включенным keep-alive оно наверняка подскочит до максимума одновременно запущенных.

Вообще же операция установления соединения по локальной петле стоит копейки по времени, поэтому если вы в бэкэнд явно ходите по 127.0.0.1 (или ::1) и у вас не low-latency сервис, где вы боретесь за каждую миллисекунду времени ответа - лучше выключить.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
Ну и да, не забывайте, что nginx не так давно поддерживает keep-alive к бэкэндам, так что вполне вероятно, что в какой-нибудь lts убунте текущая версия вообще не поддерживает его.

С клиентами keep-alive лучше включать, если на ваш сайт ходят посмотреть больше, чем полторы странички, само собой. Да и nginx почти ничего не тратит на поддержание таких соединений - почти вся работа в этом месте делается ядром.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы