viewcomponent tag net mvc aspx asp asp.net multithreading

asp.net - mvc - tag helpers asp net core



Es ASP.NET multiproceso(cómo ejecuta las solicitudes) (4)

Esto podría ser un poco una pregunta tonta pero;

Si tengo dos personas iniciando sesión en mi sitio al mismo tiempo, ¿se ejecutará el código del lado del servidor uno después del otro o se ejecutarán simultáneamente en hilos separados?

Tengo curiosidad con respecto a un ataque de denegación de servicio en el inicio de sesión de un sitio web. ¿Se ralentiza el servidor porque tiene una gran cola de inicios de sesión o es lento porque tiene mil millones de inicios de sesión simultáneos!


Como otros dijeron, la mayoría de los servidores web usan múltiples procesos o hilos (mejor) para atender múltiples solicitudes a la vez. En particular, puede configurar cada grupo de aplicaciones ASP.NET con un número máximo de solicitudes en cola y procesos máximos de trabajo. Cada proceso tiene múltiples subprocesos hasta un máximo (no se puede configurar AFAIK, puedo estar equivocado), y las solicitudes entrantes se procesan según el primero en entrar, primero en salir.

Además, ASP.NET procesa una única solicitud para cada sesión, pero un usuario malintencionado puede abrir tantas sesiones como desee.

Es probable que varios inicios de sesión golpeen la base de datos y la pongan de rodillas probablemente antes del servidor web.

Hasta donde yo sé, no existe una forma integrada de acelerar las solicitudes de ASP.NET aparte de establecer el número máximo de solicitudes en cola (esperando a ser procesadas). Este número debería ser idealmente muy pequeño. Puede controlar el número de solicitudes ASP.NET en cola utilizando contadores de rendimiento. Supongamos que encuentra que, en el tráfico pico, este número es 100. Luego puede actualizar la aplicación para que rechace los intentos de inicio de sesión cuando este número sea superior a 100 para que no se golpee la base de datos (nunca lo hizo, solo un pensamiento).


Debería usar un grupo de subprocesos. Tenga en cuenta que todavía están en la misma aplicación, por lo que los elementos de nivel de aplicación, como las variables estáticas, todavía se comparten entre ellos.


Esto no está relacionado con ASP.NET per se (tengo muy pocos conocimientos en esa área), sino generalmente con servidores web. La mayoría de los servidores web usan subprocesos (o procesos) para manejar las solicitudes, por lo tanto, básicamente, cualquier fragmento de código que tenga se ejecutará para ambas conexiones en paralelo. Por supuesto, si accede a una base de datos u otro sistema de back-end donde se coloca un candado, permitiendo que solo una sesión realice consultas, es posible que haya serializado implícitamente todas las solicitudes.

Los servidores web suelen tener un número mínimo y máximo de trabajadores, que están sintonizados con el hardware actual (CPU, memoria, etc.). Si se agotan, las nuevas solicitudes se pondrán en cola esperando que un trabajador esté disponible, o hasta que se haya alcanzado la longitud máxima de cola de las solicitudes pendientes, ignorando las conexiones nuevas, negando de hecho el servicio (si esto es a propósito, se llama una denegación de servicio o un ataque DoS).

Entonces, en sus términos, es una combinación, es una gran cantidad de solicitudes simultáneas llenando la cola.


de este articulo

" Recuerde que ISAPI tiene múltiples subprocesos, por lo que las solicitudes llegarán en múltiples subprocesos a través de la referencia que fue devuelta por ApplicationDomainFactory.Create (). El Listado 1 muestra el código desensamblado del método IsapiRuntime.ProcessRequest que recibe un objeto y tipo de servidor ISB de ISAPI como parámetros. El método es seguro para subprocesos, por lo que múltiples subprocesos ISAPI pueden llamar de forma segura a esta única instancia de objeto devuelto simultáneamente ".

Entonces sí, en el caso de un ataque DOS, sería lento debido a la gran cantidad de conexiones