Обслуживать миллионы одновременных соединений и статических файлов?
Мне просто интересно узнать о конфигурации серверов, которые бы обслуживали только статические файлы с одного сервера.
Можно ли построить сервер, который просто для статических файлов и обслуживать миллионы одновременных соединений. Что может быть лучшим сервисом HTTPD для этого?
Сервер будет обслуживать только статические файлы из каталогов и не будет использовать никакие другие службы, кроме HTTPD и, конечно, PHP.
3 ответа
Миллионы одновременных подключений? Если вы не размещаете видеопотоки или другие большие файлы, http-запросы обычно заканчиваются за такое короткое время, что даже при загруженных сайтах вы не получаете столько одновременных соединений. Если вы это сделаете, у вас серьезно нет только одного сервера. Также с таким трафиком ваш сетевой трафик будет на таком высоком уровне, что я не думаю, что один сервер будет вашим лучшим выбором.
Но давайте представим, что вы действительно запускаете сервис только с одним сервером и миллионами одновременных подключений: тогда nginx или lighttpd будет вашим лучшим выбором. Далее вам, вероятно, потребуется настроить многие параметры ядра, такие как fs.open
, Также вам, вероятно, потребуется скомпилировать собственное ядро.
Вот слайды о том, как HEANET масштабировал свои параллельные сеансы Apache 2.x до 20 000+. Обратите внимание, что даже это потребовало много усилий.
"Миллионы" одновременных подключений могут быть немного труднодостижимы, но большинство веб-серверов подпадают под следующие типы архитектуры: пре-форк (1 процесс /1 поток, 1 подключение), многопоточный (1 процесс / много потоков, 1 поток на подключение), управляемый событиями (1 процесс /1 поток, много соединений). Конечно, есть гибриды, такие как apache mpm_worker, который представляет собой гибрид pre-fork и thread.
В целом, pre-fork будет обрабатывать наименьшее количество соединений, потому что создание нового процесса для каждого соединения обходится дорого и потребляет много ресурсов. Резьба несколько лучше, но тысячи или миллионы потоков также могут иметь много накладных расходов. Системы, управляемые событиями, как правило, 1-процессорные /1-потоковые и используют асинхронный / неблокирующий ввод-вывод для достижения очень высокого параллелизма с минимальными затратами ресурсов.
Вы, вероятно, захотите придерживаться управляемой событиями семьи, чтобы приблизиться к своей "миллионной параллельной" цели. Некоторые управляемые событиями приложения ограничены одним процессором. Если вы работаете на компьютере с несколькими процессорами, вам нужно будет запустить 1 экземпляр на процессор (некоторые веб-серверы могут позаботиться об этом за вас, в то время как другие потребуют от вас написания сценариев и управления ими самостоятельно).
Я ожидаю, что вы немного оптимистичны в оценках трафика, но лучшим вариантом для крупномасштабного обслуживания статических активов будет nginx. Обратите внимание, что при таком количестве одновременных подключений вам придется настроить некоторые параметры ядра.