none
Inconveniente con Concurrencia en IIS 6.0

    Question

  • Saludos.

    Por favor alguien me podría ayudar, estoy desarrollando un aplicativo Web transaccional en ASP.Net bajo Visual Basic.net con un servidor IIS 6.0 y una base de datos SYBASE 15.0. Para probar el grado de concurrencia que puede soportar el SITE he usado la herramienta Application Center Test de Microsoft, gradualmente he ido incrementando el número de conecxiones concurrentes y cuando alcanzo los 100 usuarios luego de concluir una prueba de 20 minutos, el aplicativo comienza a dar conflictos cuando se intenta conectar a la base de datos, en realidad no se conecta y hay veces que arroja un mensaje de error que indica que la referencia a un objeto no está establecida.

    Al parecer el problema radica en algún conflicto entre el Servidor Web y la Base de datos, porque se da al verificar la información del usuario en las tablas de la BDD.

    Les agradecería mucho cualquier sugerencia que me puedan dar.

    Atentamente.

    Ricardo.

    Tuesday, October 10, 2006 12:53 AM

All replies

  • De sybase, no se nada por suerte no me lo he encontrado nunca.

    Mi recomendación es que uses SQL Server, pero comprendo que a veces no se puede escoger.

    Por la parte del IIS no te preocupes, dependiendo del hardware la escalabilidad es impresionante, y si te quedas corto siempre puedes balancear la carga, aunque para eso tu aplicación no tiene que mantener estado (stateless) o mantener el estado en BD y usar una cookie para reconocer al usuario (request forwarding).

    El problema puede residir en dos partes.

    El sybase no aguanta mas de 100 conexiones concurrentes o requiere de alguna configuración especifica para poder hacerlo.

    Se usa mas de una conexión por usuario con lo cual son mas de 100 y el sybase no lo aguanta.

    Tienes un problema con el pool de conexiones y no las estas cerrando, con lo cual son muchas mas.

    En SQL Server sabria la cadena de conexión y como mirar las conexiones pero en sybase ni idea.

    Por cierto, estas preguntas mejor en los foros de la MSDN.

    Un saludo.

    Buenas practicas para el uso de los foros
    Si la respuesta te es de utilidad marca la pregunta como respondida.
    No pongas las preguntas en mas de un foro.

    Daniel Matey.
    MCSE, MCSA, MCSD, MCDBA.
    Blog: http://dmatey.spaces.live.com

    Tuesday, October 10, 2006 4:57 AM
  • Saludos.

    Primeramente quiero agradecerte por la respuesta y a la vez exponerte un poco más el tema para salir de dudas sobre todo en lo que se refiere al entorno Microsoft y que se utiliza en el aplicativo WEB.

    Utilizo algunas variables de session para mantener cierta información relacionada con el usuario y con el negocio a lo largo de toda la funcionalidad del aplicativo, algunas las he eliminado cuando efectivamente a lo largo de un proceso ya no las necesito, para lo cual utilizo el método remove de la variable de sesión, quiero estar seguro si con este método efectivamente libero el espacio de memoria destinado en el servidor para almacenar esta variable. A pesar de ello mantengo 11 variables de sesion permanentes que no las puedo eliminar por que se validan siempre en cada proceso que realiza el aplicativo. Mi pregunta es además si con estas 11 variables de sesion permanentes a lo largo de toda la sesión cuando existen 100 usuarios o más podría saturar la memoria del servidor???

    Por lo anterior no puedo configurar enableSessionState a false.

    La forma en que está desarrollado el aplicativo solo perrmite abrir una conexión por operación que se quiera realizar sobre la base de datos, es decir se hace un open cuando se quiere ejecutar un query o un store procedure, pero apenas termina se cierra la conexión close() incluso en condiciones de error utilizo la estructura try - catch - finally para asegurarme de cerrar todas las conexiones. Por lo tanto a lo mucho se tendría 100 conexiones abiertas cuando los 100 usuarios concurrentes intentan accesar a la BDD.

    La aplicación web tiene modo de autenticación "Forms", por políticas de la empresa requieren que los usuarios del aplicativo no se conecten con un usuario genérico, es decir que cada usuario tiene su propio User ID y password en la cadena de conexión que usa para conectarse a la base de datos, no se si esto pueda reducir el rendimiento o generar algún conflicto entre el servidor de la BDD y el servidor Web.

    Por lo anterior no utilizo el pool de conexiones por cuanto allí si tendría el problema de incremento dramático de conexiones a la base de datos.

    Otra duda que tengo es si la herramienta Test Application Center me podría genrar algun tipo de problema en el IIS cuando se envían varias conexiones desde un mismo cliente (100). He investigado que en el archivo machine.config hay una variable llamada maxconnection y que está seteada por defecto a 12, según leí es el número máximo de conexiones que puede soportar un aplicativo para una misma dirección IP, no se si esto me pueda ocasionar problemas con el escenario de las pruebas desarrolladas.

    En un ambiente real nunca voy a tener 100 usuarios desde una misma máquina cliente intentándose conectar al aplicativo web a través del IIS, entonces se tendría el mismo comportamiento del Sevidor Web cuando trabaje en su ambiente real??, es decir usuarios concurrentes pero desde máquinas diferentes??? , cual sería la diferencia si esque la hubiere en cuestiones de rendimiento y administración de conexiones??

    El motor de base de datos SYBASE está configurado para soportar hasta 250 conexiones, entonces no debería tener inconvenientes en manejar 100 usuarios

    Por cierto  sobre utilizar SYBASE o SQLServer efectivamente no depende de mi, sino más bien son disposiciones de la empresa que está utilizando el aplicativo WEB.

    Te agradezco por cualquier información que me puedas proporcionar.

    Wednesday, October 11, 2006 12:21 AM
  • Un servidor web con IIS 6 soporta miles de usuarios concurrentes, el limite es el servidor, piensa que es el servidor web mas usado y que webs como Microsoft.com corren con IIS 6.

    Solo te tienes que preocupar por el estado si vas ha balancear, si no da lo mismo, de todas formas puedes guardar el estado en bd, busca información sobre aspstate y viewstate.

    Tendrias que asegurarte de con el close es suficiente, a lo mejor tienes que llamar al dispose, por curiosidad mirate la clausula using, te ahorrara el uso de try cath finally.

    Es mejor la seguridad integrada, puesto que delegas la autenticación en el directorio activo, la autenticación basada en forms, esta bien, pero depende mucho de la seguridad de la bd, puede tener problemas de sql injection, etc.

    El metodo de validación que uses no afecta al uso de pool o no, esto lo define el proveedor de datos y la cadena de conexión, el uso del pool solo mejora el rendimiento.

    De todas formas te insisto en que el mejor foro para esto es el de la MSDN, en este se tratan cosas de sistemas no de desarrollo.

    Un saludo.

    Buenas practicas para el uso de los foros
    Si la respuesta te es de utilidad marca la pregunta como respondida.
    No pongas las preguntas en mas de un foro.

    Daniel Matey.
    MCSE, MCSA, MCSD, MCDBA.
    Blog: http://dmatey.spaces.live.com

    Wednesday, October 11, 2006 4:49 AM
  • Daniel Matey solo una aclaracion. el servidor web mas usado no es IIS si no que apache,

    Aqui hay un link http://www.sahw.com/wp/archivos/2007/06/08/apache-vs-microsoft-iis-estadisticas-de-utilizacion-distribucion-y-alojamiento-de-malware/

    si bien es muy antiguo, las cosas han cambiado en la actualidad pero apache sigue siendo el webAplication, aplicaction Server, servidor web o como quieras llamarlo mas utilizado.

    --
    Atte.
    Victor Hugo Saavedra
    http://vhspiceros.blogspot.com
    Friday, May 08, 2009 3:41 PM
  • tambien para los cluster tienes que tener configurado el KeyMAchine en el webconfig.
    para que los 2 servidores puedas decifrar de la misma forma el viewState de esta forma da lo mismo si caes en uno o otro servidor.
    http://msdn.microsoft.com/en-us/library/ms998288.aspx


    otra buena practica considero yo es guardar la sessiones en base de datos.


    Eso.

    --
    Atte.
    Victor Hugo Saavedra
    http://vhspiceros.blogspot.com
    Friday, May 08, 2009 3:48 PM