Apache Connection против запроса

Apache Connection против запроса

Заранее извиняюсь, если это простой вопрос, но я совсем запутался после прочтения документации Apache и других руководств.

Обслуживает ли один процесс Apache prefork все HTTP-запросы для данного клиента? Я так и думал, но когда я уменьшаю maxclients до небольшого числа, время загрузки моей страницы резко падает. И это несмотря на то, что я единственный клиент на рассматриваемом сервере. Это предполагает, что каждый процесс обслуживает один HTTP-запрос за раз, а не все запросы в пределах окна TimeOut.

Итак, если для полной загрузки одной веб-страницы требуется 15 HTTP-запросов, нужно ли мне 15 prefork-процессов Apache для ее оптимальной загрузки?

решение1

Исходя из того, как мы обычно думаем о протоколе HTTP, это не должно быть проблемой.

Современные браузеры используютподдерживать активностьсоединения, которые могут переносить только один запрос за раз; в этом смысле использование MaxClients 1не должно оказывать никакого влияния, поскольку каждый запрос в этих соединениях завершается до начала следующего.

Однако, это еще одна проблема современных браузеров; они используют несколько соединений. В наши дни вы можете получить html-страницу, которая требует загрузки 40 других ресурсов: изображений, javascript, css. С точки зрения эффективности не имеет особого смысла сваливать их все в один файл для отправки через одно соединение; вместо этого они разбиваются на несколько соединений (каждое из которых по-прежнему является одним файлом) для одновременной загрузки.

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

решение2

mpm_preforkбудет отвечать только на одно соединение. Если вы хотите, чтобы Apache обслуживал более одного соединения на процесс, вам нужно будет использовать многопоточный MPM, например mpm_worker.

Современные браузеры используют конвейеризацию (несколько одновременных подключений) и keep-alive (серийные запросы на одном подключении) для увеличения пропускной способности и эффективности сети, а также для снижения задержки. Например, Mozilla Firefox можно настроить, изменив network.http.pipeliningи network.http.pipelining.maxrequestsвabout:config

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