Как управлять статическим контентом для высоконагруженного сайта через 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