2009-01-12 2 views
12

Cela peut être une question un peu bête mais;Est-ce que ASP.NET est multithread (comment il exécute les requêtes)

Si deux personnes se connectent à mon site exactement au même moment, le code côté serveur sera-t-il exécuté l'un après l'autre ou sera-t-il exécuté simultanément dans des threads séparés?

Je suis curieux en ce qui concerne une attaque de déni de service sur un site Web de connexion. Est-ce que le serveur ralentit parce qu'il a une file d'attente massive de connexions ou est-ce lent parce qu'il a un milliard de connexions simultanées!

Répondre

13

Ce n'est pas lié à ASP.NET en soi (j'ai très peu de connaissances dans ce zone), mais généralement des serveurs Web. La plupart des serveurs Web utilisent des threads (ou des processus) pour gérer les requêtes, donc, fondamentalement, l'extrait de code que vous avez sera exécuté pour les deux connexions en parallèle. Bien sûr, si vous accédez à une base de données ou à un autre système dorsal dans lequel un verrou est placé, autorisant une seule session à effectuer des requêtes, vous avez peut-être implicitement sérialisé toutes les demandes.

Les serveurs Web ont généralement un nombre minimum et maximum de travailleurs, qui sont adaptés au matériel actuel (UC, mémoire, etc.). Si elles sont épuisées, les nouvelles demandes seront mises en file d'attente en attendant qu'un ouvrier devienne disponible ou jusqu'à ce qu'une file d'attente maximale des demandes en attente soit atteinte, ignorant ainsi les nouvelles connexions, refusant effectivement le service (si c'est intentionnellement, cela s'appelle un déni de service ou une attaque DoS). Donc, selon vous, c'est une combinaison, c'est un grand nombre de demandes simultanées qui remplissent la file d'attente.

+0

Y a-t-il un nombre maximum de demandes pouvant être traitées? Ce maximum inclut-il plusieurs sites Web hébergés sur le même serveur? Exemple: si un serveur Web peut gérer 5 000 requêtes et que deux sites Web sont hébergés sur ce serveur, cela signifie-t-il que ses 5 000 demandes sont réparties sur les deux sites Web? –

2

Il doit utiliser un pool de threads. Notez qu'ils sont toujours dans la même application, donc les éléments au niveau de l'application comme les variables statiques sont toujours partagés entre eux.

1

de this article

"Rappelez-vous ISAPI est multi-thread en fait la demande va venir sur plusieurs threads par la référence qui a été retourné par ApplicationDomainFactory.Create(). Le listing 1 montre le code désassemblé à partir de la méthode IsapiRuntime.ProcessRequest qui reçoit en tant que paramètres un objet ecb ISAPI et un type de serveur La méthode est thread-safe, de sorte que plusieurs threads ISAPI peuvent appeler en toute sécurité cette instance d'objet retournée simultanément. "

Alors oui, dans le cas d'une attaque DOS, il serait lent à cause du grand nombre de connexions

1

Comme d'autres l'ont dit, la plupart des serveurs Web utilisent plusieurs processus ou threads (mieux) pour répondre à plusieurs demandes à la fois. En particulier, vous pouvez définir chaque pool d'applications ASP.NET avec un nombre maximal de demandes en file d'attente et de processus de travail maximum. Chaque processus a plusieurs threads jusqu'à un maximum (non configurable AFAIK, je peux me tromper), et les demandes entrantes sont traitées selon le principe du premier entré, premier sorti. En outre, ASP.NET traite une seule requête pour chaque session, mais un utilisateur malveillant peut ouvrir autant de sessions qu'il le souhaite.

Plusieurs connexions vont probablement frapper la base de données et l'amener à genoux probablement avant le serveur Web lui-même. Pour autant que je sache, il n'existe pas de méthode intégrée pour limiter les requêtes ASP.NET, à l'exception du nombre maximal de requêtes en file d'attente (en attente de traitement). Ce nombre devrait idéalement être très petit. Vous pouvez surveiller le nombre d'ASP en file d'attente.Requêtes NET utilisant des compteurs de performance. Dites que vous trouvez que, sur le trafic de pointe, ce nombre est 100. Vous pouvez alors mettre à jour l'application afin qu'elle refuse les tentatives de connexion lorsque ce nombre est supérieur à 100 afin que la base de données ne soit pas touchée.

Questions connexes