Назад | Перейти на главную страницу

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

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

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

  • Наличие нескольких мест, физически близких к пользователям, снижает задержку.
  • Скорость сетевого интерфейса и пропускная способность памяти ограничены.
  • Объем операций ввода-вывода в секунду ограничен.
  • Может быть желательна высокая доступность.

Знайте пределы одного узла. Продвиньте один узел как можно дальше при тестировании и производстве, пробуя различные конфигурации и размеры. Когда это превышено, выполните горизонтальное масштабирование до нескольких узлов с помощью выбранного решения для балансировки нагрузки: прокси-сервер в стиле балансировки нагрузки, 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