Почему Nginx такой быстрый?

31

Как такой сайт, как rambler, так быстро отображает динамический контент? Даже быстрее, чем Yahoo (у которого есть сервер в моей стране - SE Asia; rambler - нет).

Это чисто способность Nginx? Куда мне обратиться, чтобы узнать о таких возможностях?

Здесь я довольно новичок, и я считаю, что serverfault.com, если его обслуживать из Nginx, будет намного быстрее IIS 7 (при условии, что время доступа к базе данных будет одинаковым в обоих случаях). Это справедливое предположение?

Редактировать:

Пост от Карла с использованием Nginx перед IIS7

Quintin Par
источник
Обратите внимание, что serverfault.com уже использует Nginx (согласно Wappalyzer ). : P
WillS

Ответы:

26

Вы можете увидеть эту презентацию для ознакомления с внутренностями nginx. Основным отличием является асинхронная обработка запросов вместо использования потоков, как это делает Apache. Вы также можете взглянуть на эту документацию .

максвелл
источник
2
Хороший ответ относительно архитектуры nginx и проблемы C10K. Тем не менее, я понимаю, что вопрос OP связан с воспринимаемой скоростью загрузки страницы, которая не имеет ничего общего с nginx.
Джеспер М
Что на самом деле означает «асинхронный»? Я всегда думал, что это означает выполнение в отдельном потоке.
Иван
Асинхронное среднее Nginx всегда действует как прокси, даже если Php: Nginx получает HTTP-запрос, отправляет на сервер Php, НО не блокирует / не ожидает отправки HTTP-ответа. Вот почему вы видите разницу (скорость, процессор / оперативная память) для сайта с высоким трафиком. Но для нескольких запросов нет увеличения производительности (которые касаются 95% интернета ....), но Nginx крут ;-)
Thomas Decaux
21

Как такой сайт, как rambler, так быстро отображает динамический контент? ... Это чисто способность Nginx? Куда мне обратиться, чтобы узнать о таких возможностях?

Это не имеет ничего общего с используемым веб-сервером - и nginx, IIS и Apache «достаточно быстры» и обычно выполняют свою работу в течение миллисекунд. nginx намного быстрее, чем Apache, но это просто означает, что владельцу сайта потребуется меньше серверов для веб-службы - nginx не передает вам данные быстрее.

Менее важной частью является скорость на стороне сервера , то есть время, необходимое для создания HTML. Более важной частью является производительность «внешнего интерфейса» , под которой я подразумеваю HTML, CSS, Javascript и изображения, их количество, размер и правильную доставку (сжатие HTTP, кэширование).

Конечно, скорость на стороне сервера все еще важна, я не говорю, что ее следует игнорировать или что это не имеет значения. Но обычно это наименьшая часть воспринимаемой скорости конечного пользователя - работа на стороне сервера часто выполняется менее чем за 500 миллисекунд, но страница не готова до того, как пройдут 3000 - 5000 миллисекунд. Основная часть этого времени уходит на загрузку ресурсов внешнего интерфейса (CSS, Javascript, Images).

Стив Соудерс сделал оригинальную работу, в то время как в Yahoo он сейчас работает в Google. Его первая книга «Высокопроизводительные веб-сайты» - лучшая отправная точка для получения дополнительной информации о создании быстрых веб-сайтов. Тот же материал, что и в его книге, можно найти в этом видео-выступлении и в этих правилах дизайна . Тем не менее, я считаю, что книга быстро читается и намного легче для понимания.

Вы можете запускать сайты через тестер WebPageTest.org - это даст вам хорошее представление о интерфейсной части этих сайтов и о том, почему они работают быстрее или медленнее.

Я считаю, что serverfault.com, если он обслуживается из Nginx, будет намного быстрее IIS 7 (при условии, что время доступа к базе данных будет одинаковым в обоих случаях). Это справедливое предположение?

Нет, это недоразумение. :-)

Джеспер М
источник
18

Nginx чаще используется для балансировки нагрузки других приложений / серверов и обслуживания статического контента, чем в качестве полного сервера.

Например, вы можете написать приложение, используя одну из многих структур Python, и иметь nginx для многих случаев этого (возможно, на нескольких машинах). В этом случае сервер nginx преследует две цели: он обрабатывает запросы статического контента, такого как изображения и таблицы стилей напрямую (и благодаря своему дизайну, делает это очень быстро) и передает динамические запросы приложению, распределяя нагрузку между всеми экземплярами, о которых он знает. , Это очень популярная конфигурация в сообществе Ruby on Rails.

Есть две другие возможные причины, по которым Rambler может показаться вам быстрее, чем местный сервис Yahoo. Во-первых, локальный PoP Yahoo может просто не иметь достаточно ресурсов, чтобы обслуживать количество запросов, которые он получает быстрее, поэтому, возможно, простое добавление большего количества оборудования (при условии, что программное обеспечение масштабируется таким образом) ускорит его (но, по-видимому, разница не в том, что стоит затрат на содержание дополнительного комплекта, или Yahoo сделал бы это). Другая большая разница может заключаться в серверной части, а не в веб-сервере - эти две службы, несомненно, будут иметь очень разное расположение баз данных, и даже если нет, они вряд ли будут выполнять точно такое же разнообразие запросов (и количество аппаратное обеспечение, предназначенное для архитектуры базы данных, также окажет существенное влияние).

Анализ того, почему один сервис быстрее другого (как правило, или в определенных обстоятельствах), как правило, не приводит к единственному простому ответу - существует множество способов разработать приложение, предназначенное для масштабирования до многих тысяч пользователей, каждый со своим свои преимущества, проблемы и компромиссы, и даже если вы учтете все эти различия, каждый сайт будет иметь различную динамику на уровне пользователя, плюс есть проблемы с сетью, не зависящие от разработчиков.

Дэвид Спиллетт
источник
3

nginx возможно, но более масштабируемая архитектура с разумной балансировкой нагрузки перед серверами статического контента / генераторами динамического контента. если вы действительно хотите получить отличный опыт работы с конечным пользователем, вам, вероятно, следует переместить контент ближе к «глазным яблокам» - используйте немного CDN.

если вы заинтересованы в теме - проверьте это и это и .. хорошо - Google; -]

PQD
источник
2

Лучшие сайты используют ускорители приложений, такие как Zeus ZXTM, - они могут кэшировать динамические ответы во многих случаях, что, очевидно, приносит большую пользу.

Chopper3
источник
0

Мне тяжело видеть сбой сервера гораздо быстрее (может быть, у SO могут быть проблемы с загрузкой из-за трафика?), Так как это уже мгновенная загрузка страницы здесь, в ЕС, по моему маршруту. Это намного быстрее и быстрее, чем большинство местных новостных сайтов и так далее.

Большинство очевидных проблем со временем загрузки и задержкой возникает между сервером и конечным пользователем imo, а не фактической производительностью сервера (если кто-то не определил или спроектировал что-то не так). Разные сайты могут быть перенаправлены по-разному, и есть большая вероятность того, что местный сайт для меня имеет большую задержку, чем что-либо по всей планете - все зависит от такого количества переменных, что вы не можете сказать, что это разрешается только службой обновить / переключить, если вы не знаете, где проблема для конкретного использования (r) ...

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

Оскар Дювеборн
источник