Подтвердить что ты не робот

Является ASP.NET многопоточным (как он выполняет запросы)

Это может быть немного глупый вопрос, но

Если у меня есть два человека, которые подключаются к моему сайту точно в одно и то же время, будет ли выполняться код сервера на стороне один за другим или они будут выполняться одновременно в отдельных потоках?

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

4b9b3361

Ответ 1

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

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

Итак, в ваших терминах это комбинация, это огромное количество одновременных запросов, заполняющих очередь.

Ответ 2

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

Ответ 3

from в этой статье

" Помните, что ISAPI является многопоточным, поэтому запросы входят в несколько потоков через ссылку, которая была возвращена ApplicationDomainFactory.Create(). Листинг 1 показывает разобранную код из метода IsapiRuntime.ProcessRequest, который получает в качестве параметров объект ecb и тип сервера ISAPI. Этот метод является потокобезопасным, поэтому несколько потоков ISAPI могут безопасно вызывать этот экземпляр одного экземпляра возвращенного объекта одновременно.

Итак, да, в случае атаки DOS это будет медленным из-за большого количества соединений

Ответ 4

Как отмечают другие, большинство веб-серверов используют несколько процессов или потоков (лучше) для одновременного обслуживания нескольких запросов. В частности, вы можете установить каждый пул приложений ASP.NET с максимальным количеством запросов в очереди и максимальными рабочими процессами. Каждый процесс имеет несколько потоков до максимума (не настраиваемый AFAIK, может быть, я ошибаюсь), а входящие запросы обрабатываются по принципу "первым в первом".

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

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

Насколько я знаю, не существует встроенного способа дросселирования запросов ASP.NET, кроме установки максимального количества запросов в очереди (ожидающих обработки). Это число должно быть идеально маленьким. Вы можете контролировать количество запросов ASP.NET в очереди, используя счетчики производительности. Скажем, вы обнаружите, что при пиковом трафике это число равно 100. Затем вы можете обновить приложение, чтобы оно отказывалось от попыток входа в систему, когда это число превышает 100, чтобы база данных не попадала (никогда не делала этого, просто мысль).