Настройка lighttpd для множества легких одновременных Keep-Alive http-соединений

Настройка lighttpd для множества легких одновременных Keep-Alive http-соединений

Я использую lighttpd в качестве front-end proxy для моего собственного HTTP-сервера приложений. Мне нужно настроить lighttpd для большого количества (скажем, около 5000) одновременных http-подключений с большим тайм-аутом и настройкой KeepAlive. Каждое подключение будет в основном простаивать. Представьте себе HTTP-сервер чата.

Мой HTTP-сервер использует взаимодействие типа http-push Comet (см. Wikipediahttp://en.wikipedia.org/wiki/Комета_(программирование)). В частности, клиент AJAX отправляет запрос GET, на который сервер не отвечает немедленно. Вместо этого сервер ждет с открытым HTTP-соединением, пока ему не понадобится сообщить клиенту новое состояние, а затем отправляет HTTP-ответ на запрос GET. Клиент обрабатывает ответ и продолжает отправлять другой запрос GET, на который сервер снова не ответит немедленно.

Однако, ради вопроса, точная природа запросов не нужна. По сути, нужна конфигурация lighttpd, которая позволяет открывать большое количество одновременных HTTP-прокси-соединений с низкой пропускной способностью одновременно.

Как настроить lighttpd 1.4.19. Я работаю под Ubuntu 8.04. lighttpd проксирует запросы на мой сервер приложений, а также на мой бэкэнд django.

  • Мне просто поставить точку server.max-keep-alive-requests = 5000и закончить на этом?

  • Должно ли быть так server.max-fds = 5000или какое-то большее число?

  • Какие существуют соображения по поводу памяти?

  • Возможно, мне следует усилить защиту моего сервера приложений, чтобы его можно было использовать без прокси-сервера Lighttpd (я не настолько уверен в своем программировании, чтобы оно напрямую взаимодействовало с внешним миром без надежного прокси-сервера)?

Утверждается, что lighttpd может обрабатывать 10 000 одновременных подключений. Как мне настроить его на обработку половины этого числа, большинство из которых в основном простаивают?

решение1

Помните, что каждое прокси-соединение использует (минимум) два FD, один для клиента, один для проксируемого сервера. Также рассмотрите ~5-50 FD для накладных расходов.

Что касается остальной части вашего вопроса, я бы сказал, что вам нужно протестировать приложение в вашей среде, чтобы найти наилучшие настройки.

решение2

Для этого вам понадобится Lighttpd-1.5.x (в основном из SVN), поскольку прокси в 1.4.x не будет мультиплексировать ввод-вывод для обмена данными между Lighttpd и бэкендом в 1.4.x.

Насколько мне известно, Lighttpd-1.5.x — единственный обратный прокси, способный это сделать.

Вы хотите использовать mod_proxy_coreи mod_proxy_backend_http, и используйте proxy-core.max-keep-alive-requestsи proxy-core.max-pool-size(обратите внимание, что они имеют префикс «proxy-core.» вместо «server.»):http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModProxyCore

Я протестировал это с 20 000 одновременных соединений keep-alive (Lighttpd <-> backend), и это работает хорошо.

Связанный контент