2009-04-20 5 views
20

Estoy viendo ASP.NET aprender videos en asp.net/learn. En este tutorial, están construyendo un motor de prueba. En un momento dado, el narrador explica que vamos a utilizar el objeto Session para mantener el estado entre cada página (cada página contiene una pregunta y cuatro respuestas). Él dice que "dado que este es un sitio web de poco tráfico", está bien usar Session y que no tiene tiempo para implementar un método más sofisticado.¿Por qué es una mala idea usar Session para almacenar estados en sitios web de alto tráfico?

Me pregunto qué método (s) alternativo (s) está insinuando? ¿Y por qué la sesión es una mala elección para un sitio web de alto tráfico?

Respuesta

19

Almacenar datos en una base de datos, o en cookies u otro método que no está atando directamente la memoria del servidor web.

Además de cargar, la sesión también plantea problemas con la posibilidad de utilizar granjas, ya que necesitaría sincronizar la sesión en toda la granja de servidores o hacer las sesiones más rígidas, lo que puede afectar la escalabilidad.

+0

Estoy de acuerdo, cuando usamos el estado de la sesión terminamos haciendo lo mismo. +1 – John

4

Los datos de sesión se almacenan en la memoria RAM del servidor, si tiene un sitio de alto tráfico que se va a llenar muy rápido y lo último que quiere es que los datos se intercambien en el disco.

Como dice gaijin42, las cookies o un DB son la alternativa.

+0

Los datos de la sesión solo se almacenan de forma predeterminada en la memoria, pero puede almacenarlos en una base de datos. –

2

Para sitios web de alto tráfico, es posible que esté buscando en Memcached. Es un mecanismo de almacenamiento en caché que se almacena en la memoria RAM de una computadora remota. Recientemente, se ha creado un puerto win32 de la biblioteca (solo antes era posible con Linux).

1

No voy a repetir lo que ya se mencionó aquí, pero otra alternativa es usar el hash de la aplicación. Se debe usar con moderación, ya que consumirá memoria en su servidor web como Adam ya lo mencionó, pero proporciona una buena manera de almacenar cosas que son comunes a TODOS sus usuarios.

Esto le evita tener que volver a su base de datos para recuperar información que probablemente ya fue solicitada por otra persona.

Otra alternativa es similar a la aplicación de caché que tiene más flexibilidad en términos de cuando se libera, duración, etc.

Aquí hay algunos enlaces en caso de que esté interesado: ASP NET CachingApplication State

4

sesión como un método de almacenamiento de estado es difícil en sistemas de alto tráfico por varias razones.

En primer lugar, el método de almacenamiento de sesión predeterminado está en proceso, lo que significa que si tiene una granja de servidores con equilibrio de carga, 'perderá' constantemente información de sesión cuando un usuario obtiene páginas servidas desde diferentes servidores.

El servidor de sesión in-proc también muere cuando se recicla un grupo de aplicaciones, lo que ocurre con mayor frecuencia en los servidores con mayor tráfico.

Las opciones de escalabilidad de los datos de sesión son

  1. Utilice la libre disposición ASP.NET servidor de la sesión y el punto todas sus aplicaciones en que
  2. Uso de SQL Server para almacenar datos de sesión.

Debido a la naturaleza de los datos de la sesión en general, ninguno de estos es una muy buena opción para un sitio de mucho tráfico (a menos que tenga dinero ilimitado para tirar en el hardware).

1

Usamos una base de datos para cualquier cosa de alto tráfico o que resulte en un gran estado de sesión. En cambio, almacenamos un puntero en el estado de sesión real que apunta a nuestro registro de base de datos. Entonces, la única sobrecarga que tenemos es el ancho de banda entre el servidor web y el servidor de la base de datos, que será mucho menor que entre un usuario determinado y el servidor web.

+0

Me sorprende que el servidor web a la base de datos se considere rápido, mientras que el servidor web al cliente se considera lento. ¿Cómo se almacena su sesión en su base de datos? – MedicineMan

+1

Incluso una base de datos mal diseñada probablemente realizará el servidor web para el cliente porque el cliente visitará Internet en la mayoría de los casos, a menos que esté haciendo aplicaciones de intranet. Es probable que el servidor de la base de datos y el servidor web estén en la misma ubicación física e, incluso si no, probablemente estarán en una red optimizada para una comunicación rápida entre los dos. Otra razón por la que lo hicimos de esta manera fue permitirle a su estado que lo siga a otras computadoras. – John

6

Para otras alternativas, puede leer el artículo Nine Options for Managing Persistent User State in Your ASP.NET Application.

En los artículos, el autor explica los pros y los contras de cada método.

Del resumen:

ASP.NET ofrece muchas maneras diferentes a mantener los datos entre las peticiones del usuario. Puede utilizar el objeto Aplicación, las cookies , los campos ocultos, los objetos de caché Session o , y muchos otros métodos . Decidir cuándo usar cada uno de a veces puede ser difícil. Este artículo introducirá las técnicas antes mencionadas y presentará algunas pautas sobre cuándo usarlas. Aunque muchas de estas técnicas existían en ASP clásico, las mejores prácticas para cuándo usarlas han cambiado con la introducción del .NET Framework. Para conservar los datos en ASP.NET, , tendrá que ajustar lo que aprendió previamente sobre el estado de manejo en ASP.

Cuestiones relacionadas