2010-03-14 14 views
5

¿Cuál es el rendimiento alcanzado por habilitar sesiones en Google App Engine?¿Cuál es el impacto en el rendimiento de habilitar sesiones en Google App Engine?

Acabo de activar <sessions-enabled>true</sessions-enabled> en mi aplicación Google App Engine y ahora mis solicitudes utilizan consistentemente 100 ms más de tiempo de CPU que antes de habilitarlo. También hace que el usuario espere 100 ms adicionales para que el servidor responda en cada solicitud. Esto parece ser un costo bastante significativo, ni siquiera estoy llamando a getSession o usándolo de ninguna otra manera y aún agrega esta latencia adicional.

¿Hay algo que pueda hacer para acelerar esto?

EDITAR: Extrañamente, el tiempo extra de la CPU se ha ido.

Respuesta

2

Cada solicitud que use sesiones necesitará recuperar los datos de la sesión de Memcache (en el mejor de los casos) o del almacén de datos y luego, al final de la solicitud, escribir información de sesión tanto en el caché como en el almacén de datos. 100 ms de latencia agregada parece una cifra razonable; Obviamente, la latencia real para cualquier solicitud dependerá de si hay una falta de caché y la latencia (muy fluctuante, ver la página de estado del motor de la aplicación) para cada llamada API.

0

2018 ACTUALIZACIÓN

Sé que esta pregunta es un poco viejo, pero creo que vale la pena mencionar que el rendimiento de las sesiones GAE es actualmente aún más pobres. Esto se debe a que ahora se está indexando la propiedad _expires de _ah_SESSION. Tener este índice seguramente es útil cuando consulta sesiones caducadas. Pero hay un inconveniente a este:

  1. almacenar una _ah_SESSION costes entidad 4 escribe en lugar de 2,
  2. ya que la propiedad _expires contiene aumentando monótonamente valores, manteniendo su índice viene con un cierto riesgo de contención, ver this question para más detalles.

EDIT: Tenga en cuenta que hay un mito que algo generalizada _ah_SESSION entidades se reescriben automáticamente después de cada petición simplemente para actualizar la fecha y hora de caducidad. Pero esto no es cierto. De acuerdo con el actual implementation of SessionManager, tales reescrituras se aplican solo cuando la sesión está expirada al menos en un 25%. Lo que reduce significativamente el acceso al almacén de datos. Solo lo menciono porque originalmente también creía en este mito. : D