2009-01-12 12 views
12

To może być trochę głupie pytanie, ale;Czy wielowątkowe ASP.NET (w jaki sposób wykonuje żądania)?

Jeśli mam dwie osoby logujące się do mojej witryny dokładnie w tym samym czasie, czy kod po stronie serwera będzie wykonywany jeden po drugim, czy będzie wykonywany jednocześnie w osobnych wątkach?

Jestem ciekawy w kwestii ataku typu "odmowa usługi" na stronie logowania. Czy serwer zwalnia, ponieważ ma ogromną kolejkę logowania lub jest wolny, ponieważ ma miliard równoczesnych loginów!

Odpowiedz

13

ten nie jest powiązany z ASP.NET per se (mam bardzo małą wiedzę, że obszar), ale ogólnie serwerów internetowych. Większość serwerów WWW używa wątków (lub procesów) do obsługi żądań, więc w zasadzie każdy fragment kodu, który masz, będzie wykonywany dla obu połączeń równolegle. Oczywiście, jeśli uzyskujesz dostęp do bazy danych lub innego systemu zaplecza, w którym umieszczona jest blokada, pozwalając tylko jednej sesji na wykonywanie zapytań, możesz niejawnie serializować wszystkie żądania.

Serwery WWW zwykle mają minimalną i maksymalną liczbę pracowników, którzy są dostrojeni do bieżącego sprzętu (procesory, pamięć itp.). Jeśli zostaną one wyczerpane, nowe żądania będą czekały w kolejce na udostępnienie pracownika lub do momentu osiągnięcia maksymalnej długości oczekujących żądań, w którym to momencie zignoruje nowe połączenia, skutecznie odmawiając usługi (jeśli jest to celowe, nazywa się to odmowa usługi lub atak DoS).

Tak więc, w Twoich warunkach jest to kombinacja, to ogromna liczba jednoczesnych żądań zapełniających kolejkę.

+0

Czy istnieje maksymalna liczba żądań, które można obsłużyć? Czy to maksimum obejmuje wiele witryn internetowych hostowanych na tym samym serwerze? Przykład: jeśli serwer internetowy może obsłużyć 5000 żądań, a na tym serwerze znajdują się dwie witryny hostowane, czy oznacza to 5000 żądań w obu witrynach? –

2

Powinien używać puli wątków. Zauważ, że nadal znajdują się w tej samej aplikacji, więc elementy poziomu aplikacji, takie jak zmienne statyczne, są nadal udostępniane między nimi.

1

z this article

"Zapamiętaj ISAPI jest wielowątkowy zażąda się przyjść na wielu wątków przez odniesienie, które zostały zwrócone przez ApplicationDomainFactory.Create(). Listingu 1 przedstawia kod zdemontowaną z metody IsapiRuntime.ProcessRequest, która przyjmuje jako parametr parametry obiektu ECB i typu serwera ISAPI. Metoda jest bezpieczna dla wątków, więc wiele wątków ISAPI może bezpiecznie wywoływać tę pojedynczą instancję zwróconego obiektu jednocześnie. "

Więc tak, w przypadku ataku DOS, byłoby powolne ze względu na dużą liczbę połączeń

1

Jak powiedzieli inni, większość serwerów używa wielu procesów lub wątków (lepiej) do obsługi wielu żądań naraz. W szczególności można ustawić każdą pulę aplikacji ASP.NET z maksymalną liczbą oczekujących żądań i maksymalnych procesów roboczych. Każdy proces ma wiele wątków do maksimum (nie można konfigurować AFAIK, może się mylę), a żądania przychodzące są przetwarzane na zasadzie first-in-first-out.

Ponadto program ASP.NET przetwarza pojedyncze żądanie dla każdej sesji, ale złośliwy użytkownik może otworzyć dowolną liczbę sesji.

Wiele identyfikatorów prawdopodobnie trafi w bazę danych i przyniesie ją na kolana prawdopodobnie przed samym serwerem.

Z tego, co wiem, nie ma wbudowanego sposobu dezaktywacji żądań ASP.NET poza ustawieniem maksymalnej liczby oczekujących żądań (oczekujących na przetworzenie). Ta liczba powinna być idealnie mała. Możesz monitorować liczbę oczekujących ASP.Żądania NET za pomocą liczników wydajności. Załóżmy, że w przypadku największego ruchu liczba ta wynosi 100. Następnie można zaktualizować aplikację, aby odmówiła prób logowania, gdy liczba ta przekroczy 100, aby baza danych nie została trafiona (nigdy nie była to myśl, tylko jedna myśl).

Powiązane problemy