Что в действительности означают параллельные запросы? - PullRequest
7 голосов
/ 16 февраля 2011

Когда мы говорим о емкости веб-приложения, мы часто упоминаем параллельные запросы, которые оно может обработать.

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

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

Прав ли я в этом?

Спасибо.

Ответы [ 3 ]

7 голосов
/ 16 февраля 2011

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

Например, если запрос выполняется в среднем 2 секунды (от получения его на веб-сервере дообрабатывая его через приложение для отправки ответа), тогда может потребоваться обработать много одновременных запросов, если он получает много запросов в секунду.

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

3 голосов
/ 16 февраля 2011

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

Добавление многопоточности (или нескольких процессоров / ядер) к изображению, и вы можете видеть, как длительные операции, такие как чтение из базы данных (что требует много ожидания ответа), могут легко перекрываться, хотя отдельные пакеты поступают в последовательном порядке.

Редактировать: Добавлено примечание выше, чтобы учесть мнение Гейба.

0 голосов
/ 20 сентября 2017

. Когда http-сервер прослушивает порт 80, происходит следующее:

  • клиент подключается к серверу для запроса какой-либо страницы;он подключается с какого-то исходного IP-адреса с использованием некоторого исходного локального порта.

  • ОС (фактически, сетевой стек) просматривает IP-адрес назначения входящего запроса (поскольку сервер может иметь болееодин NIC) и порт назначения (80) и проверяет, зарегистрировано ли какое-либо приложение для обработки данных на этом порту (http-сервер).Комбинация из 4 чисел (исходный IP, исходный порт, конечный IP, порт 80) однозначно идентифицирует соединение.Если такого соединения еще не существует, новое соединение добавляется во внутреннюю таблицу сетевого стека, и запрос соединения передается в прослушивающий сокет http-сервера.Отныне сетевой стек просто передает данные для этого подключения к приложению.

  • Несколько клиентов могут отправлять запросы, для каждого из которых происходит вышеуказанное.Таким образом, с точки зрения сети все происходит последовательно, поскольку данные поступают по одному пакету за раз.

  • С точки зрения программного обеспечения http-сервер прослушивает входящие запросы.Количество запросов, которые он может поставить в очередь до того, как клиенты начнут получать ошибки, определяется программистом на основе аппаратной емкости (это первый бит параллелизма: может быть несколько запросов, ожидающих обработки).Для каждого из них будет создан новый сокет (как можно быстрее, чтобы продолжить очистку очереди запросов), и пусть фактическая обработка запроса будет выполняться другой частью приложения (различными потоками).Эти процедуры обработки (в идеале) проводят большую часть своего времени в ожидании поступления данных и быстрого (в идеале) реагирования на них.

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

  • Как осуществляется фактическая обработка данных, в этом ключ к производительности (вы хотите, чтобы она была максимально эффективной).Существует несколько возможностей (асинхронные операции с сокетами, предоставляемые классом Socket, пул потоков, уникальные потоки, новые параллельные функции из .NET 4).

...