Как управлять статическим контентом для высоконагруженного сайта через nginx?

Я понимаю, что nginx хорошо подходит для подачи статического контента. Но я не могу найти какую-либо информацию о том, насколько хорошо она подходит для обслуживания очень большого количества статического контента. Допустим, я использую nginx в качестве веб-сервера и node.js в качестве сервера приложений, то я могу настроить nginx как обратный прокси-сервер и балансировщик нагрузки, так что это дает мне возможность создавать несколько node.js экземпляры (например, при обратном прокси я могу, скажем, 5 работает node.js Программы). Архитектура будет выглядеть вот так. Как я понимаю, довольно легко масштабировать веб-сайт для предоставления динамического контента (все, что вам нужно сделать, это создать несколько nodejs приложения) и nginx обслуживает статический контент. Но что, если у меня есть тонны запросов nginx сам для статического контента и одиночного nginx не могу просто справиться со всеми Я думаю, что я могу породить несколько nginx случаи, но мне кажется, это было бы неэффективно. я могу сделать nodejs приложения для обслуживания статического контента, но, как я понимаю, из-за его однопоточности nodejs это было бы неэффективно. Так есть ли у вас какие-либо мысли о том, как управлять nginx для большого количества статического контента? Или предоставить любую полезную информацию

2 ответа

Любая большая система статического контента, конечно любая, называемая сетью доставки контента, будет иметь несколько узлов (веб-серверов) по разным причинам:

  • Многочисленные местоположения, физически близкие к пользователям, снижают задержку.
  • Скорость сетевого интерфейса и пропускная способность памяти ограничены.
  • Хранение IOPS ограничено.
  • Высокая доступность может быть желательной.

Знайте пределы одного узла. Протолкните один узел как можно дальше в тестировании и производстве, пробуя различные конфигурации и размеры. Когда это будет превышено, масштабируйте до нескольких узлов с помощью выбранного вами решения балансировки нагрузки: прокси-сервера в стиле балансировки нагрузки, DNS или приемов сетевой маршрутизации. Или попробуйте коммерческий сервис CDN.

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

Из документации по nginx вы можете попробовать "Оптимизация производительности для обслуживания контента". https://docs.nginx.com/nginx/admin-guide/web-server/serving-static-content/

Возможно, вам придется предсказать или указать, сколько тяжелых нагрузок считается тяжелым для вашей системы.

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

Заметки:

  • Вы также можете попробовать использовать AWS S3 или Google Cloud Storage для обслуживания статического контента.
  • Используйте CDN: Cloudflare или Cloudfront AWS
Другие вопросы по тегам