Становятся ли ответы сервера последовательными при параллельных запросах?

Давайте иметь веб-приложение, обслуживаемое Nginx, слушающее порт 80,

Когда два или более пользователей пытаются получить доступ к некоторому URL-адресу этого приложения, такой ответ занимает много времени. Например, десять пользователей пытаются загрузить /give_me_some_charts ответы страницы и сервера в пределах 100 секунд для однопользовательского запроса.

Каждый пользователь пытается получить доступ к приложению через порт 80, Я считаю, что сервер (в нашем примере Nginx) будет блокировать этот порт до тех пор, пока ответ не будет отправлен. Таким образом, обработка десять пользователей должны 10 users * 100 seconds == 1000 seconds,

Но в Nginx есть некоторая особенность, которая называется балансировка. И теперь я не уверен, как сервер обрабатывает параллельные запросы.

Итак, как сервер обрабатывает параллельные запросы и как он отвечает? И что это за балансировка в Nginx?

1 ответ

Я не уверен насчет nginx конкретно (у меня еще не было причины его использовать), но почти на всех серверах, которые предоставляют службу для функции порта, аналогичной приведенной ниже:

  • Процесс слушателя открывает порт и ожидает подключения
  • Как только новое соединение установлено, это соединение (сокет) передается другому процессу или потоку.
  • "Основной" процесс возвращается к ожиданию другого соединения.

Сервер не будет блокировать все дальнейшие соединения, пока не завершит работу с текущим. Если это произойдет, даже слегка загруженные сайты станут непригодными для использования. Блок кода, описанный выше, как правило, настолько узкий (маленький), насколько это возможно, поэтому он завершается как можно быстрее. Некоторые серверы, которые разветвляют новые процессы (например, Apache), также сохраняют запасные "дочерние" процессы, так что им не нужно делать медленные fork системный вызов, когда клиент подключается.

Это позволяет одновременно подключать несколько (десятки, сотни, возможно, даже тысячи) клиентов. Если к вашему веб-сайту подключено 10 пользователей, то на веб-сервере будет 10 отдельных потоков или процессов, обслуживающих этих клиентов одновременно. Завершится ли все запросы за 100 секунд или займет больше времени, в основном зависит от того, что делает код. (Борются ли они за процессорное время, блокируют вызовы файловой системы или базы данных и т. Д.)

Быстрый веб-поиск позволяет предположить, что функция балансировки в nginx может быть связана с его способностью передавать запросы прокси на внутренние серверы (используя его в качестве балансировщика нагрузки), а не с его способностью обрабатывать несколько клиентов одновременно.

Другие вопросы по тегам