Концепция фронт-прокси apache + lighttpd - PullRequest
5 голосов
/ 08 октября 2008

Чтобы облегчить нагрузку на Apache, люди часто предлагают использовать lighttpd для показа статического контента.

например. http://www.linux.com/feature/51673

В этой настройке Apache передает запросы на статическое содержимое обратно на lighttpd через mod_proxy, одновременно обслуживая динамические запросы.

Мой вопрос: как это уменьшает нагрузку на сервер? Поскольку у вас все еще есть процесс apache, порождаемый для каждого входящего запроса, как это положительно влияет на нагрузку? Из того, что я вижу, размер процесса Apache, передающего свой запрос через lighttpd, так же велик, как если бы он обслуживал сам файл.

Ответы [ 5 ]

9 голосов
/ 09 октября 2008

Запуск Lighttpd позади Apache для обслуживания статических файлов мне определенно кажется разумным. Apache все еще должен распаковать HTTP-пакеты и проанализировать запрос через его дерево синтаксического анализа, отправить запросы прокси-сервера, а затем Lighttpd должен повторно распаковать, запустить файловую систему и отправить файлы обратно через Apache. Я никогда не слышал о том, чтобы кто-нибудь использовал подобную установку в производстве.

Что вы увидите, это люди, которые используют легкий веб-сервер, такой как Nginx , в качестве внешнего сервера для предоставления статических файлов и прокси-динамических URL-адресов для Apache. Или вы можете запустить Varnish или Squid в качестве внешнего кэшируемого обратного прокси-сервера, чтобы все ваши статические файлы с высоким трафиком (например, изображения, CSS и т. Д. и ) любые динамические страницы, для которых вы готовы отправлять заголовки, удобные для кэширования), хранятся в памяти.

Apache также можно оптимизировать для обслуживания статических файлов - поэтому часто, когда я слышу, как люди жалуются на Apache, они действительно не знают, как его настроить. Они только когда-либо использовали prefork MPM (в отличие от многопоточных или рабочих) и имеют все виды включенных модулей (обычно они запускаются из пакета Apache для кухонной раковины Linux-дистрибутива, который собирает все как модули и по умолчанию включает 10-20). модули или более). Настройте Apache, отключив ненужные модули / тупые функции, такие как поддержка .htaccess (что заставляет Apache сканировать файловую систему при каждом запросе!). (Вы также можете запустить два экземпляра Apache с «легким» Apache в качестве внешнего интерфейса, который проксирует «тяжелый» Apache для динамических запросов ... возможно, ваш внешний интерфейс является многопоточным, но ваш внутренний интерфейс является prefork, потому что вы должны запускать поточно-небезопасный внешние модули, такие как mod_php.)

Re:

Так как у вас все еще есть процесс Apache порождается для каждого запроса, который приходит в, как это положительно влияет Загрузка? Из того, что я вижу размер процесса Apache прокси его запрос через lighttpd так же велик как было бы, если бы он служил сам файл.

Если вы создаете процессы для каждого запроса, это означает, что вы используете prefork MPM. Имейте в виду, что когда ОС сообщает об использовании памяти для каждого из этих процессов, а не вся эта память является проводной, многие из этих процессов простаивают. А когда вы говорите о скорости, вы больше озабочены разбором запросов и внутренними ветвями кода для данного запроса (сколько обработки выполняет сервер?), Чем использованием памяти, сообщаемым ОС.

Например, если вы включите что-то вроде mod_php, то каждый из этих рабочих процессов мгновенно увеличится примерно на 20-40 МБ (в зависимости от того, что включено в вашем интерпретаторе PHP), но это не означает, что Apache использует эта память на статические запросы. Конечно, если вы оптимизируете свой сервер для максимального параллелизма для небольших статических файлов, то включение mod_php все равно будет очень плохим, вы не сможете разместить почти столько же процессов prefork в оперативной памяти.

Я, вероятно, мог бы придумать "кошмарную конфигурацию" для Apache, которая сделает более медленным обслуживанием статических файлов, чем передача этих запросов на сервер Lighttpd, но это потребовало бы включения дорогих функций, таких как .htaccess. в Apache, которые отключены в Lighttpd, так что это не совсем справедливо.

2 голосов
/ 08 октября 2008
  1. Если у вас все еще есть сила для обслуживания статического и динамического контента с той же машины (как они в вашей упомянутой статье делают), тогда я действительно не вижу смысла в этой настройке.
  2. Может быть, это уменьшает нагрузку на Apache, потому что ему не нужно выполнять ввод-вывод на диск, но это увеличит нагрузку Lighttpd на на той же машине и, таким образом, уменьшит доступная нагрузка на apache ...
  3. Возможно, доступ к Lighttpd IO легче, чем у Apache 1.3, но почему бы просто не переключиться на Apache 2 или Lighttpd полностью? И если производительность действительно начинает ухудшаться, разместите статические файлы на другом компьютере (media.yourdomain.com).

Небольшое введение в то, как вы можете выполнить правильную настройку, можно найти здесь: Развертывание Django -> прокрутите до Scaling за несколько страниц до конца

0 голосов
/ 17 ноября 2008

Используйте Apache MPM Worker fastcgi, это снизит потребление памяти сервером. Работник MPM обслуживает статический контент лучше, чем Prefork, и почти не уступает lighttpd в отношении статического контента.

0 голосов
/ 08 октября 2008

Я не знаю много о внутренней работе Apache, но одно объяснение, которое я видел, касается нехватки памяти. Короче говоря, Apache пытается сбалансировать память, которую он использует для кэширования и для динамических страниц; но обычно получается слишком много кеша и слишком мало для приложений. Если вы разделите их на разные процессы, каждый из них будет оптимизирован для типа нагрузки.

В настоящее время я использую nginx в качестве внешнего интерфейса. Это действительно быстро и легко, и специально разработано в качестве внешнего прокси; но также обслуживает статические файлы. Фактически, поскольку он также может вызывать процессы FastCGI, вы можете избавиться от Apache и при этом получить преимущества от разделения процессов файлов / приложений. (и есть некоторая дополнительная memcached магия , которая выглядит абсолютно гениально)

(Да, lighttpd также можно использовать в качестве интерфейса для Apache и / или FastCGI)

0 голосов
/ 08 октября 2008

У вас нет процесса Apache, порожденного для каждого запроса - статические файлы (изображения и т. П.) Извлекаются напрямую с помощью lighttpd.

...