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