2012-01-25 17 views
6

Actualmente estamos utilizando un NAS para el almacenamiento de archivos de sesión PHP para una matriz de servidores de aplicaciones de carga balanceada autoscaling.DynamoDB para sesiones de PHP

Estamos interesados ​​en reemplazar esto con una solución más robusta y DynamoDB de Amazon parece interesante. Veo un posible problema aquí, documentado aquí:

http://thwartedefforts.org/2006/11/11/race-conditions-with-ajax-and-php-sessions/

Sospecho DynamoDB no admite el bloqueo de objetos. ¿Alguna solución alternativa que se te ocurra?

Si tiene experiencia con otros sistemas NoSQL utilizados para las sesiones de PHP, no dude en participar, ya que los aprendizajes pueden ser similares.

Gracias de antemano

Respuesta

8

Usando las escrituras condicionales de DynamoDB, podría implementar un esquema de bloqueo pesimista similar al modo en que funciona el controlador de sesión predeterminado de PHP.

Alguien más también ha hecho una solicitud para un manejador de sesión DynamoDB: https://forums.aws.amazon.com/thread.jspa?messageID=328060.

Actualizado: El AWS SDK para PHP ahora incluye un controlador de sesión para DynamoDB. Ver https://github.com/amazonwebservices/aws-sdk-for-php/blob/master/extensions/dynamodbsessionhandler.class.php y http://docs.amazonwebservices.com/AWSSDKforPHP/latest/#i=DynamoDBSessionHandler

Actualizado: Hay un artículo sobre el gestor de sesiones DynamoDB en el blog AWS: http://aws.typepad.com/aws/2012/04/scalable-session-handling-in-php-using-amazon-dynamodb.html

+0

+1 por implementar esto y haciéndonos saber de inmediato, ¡muchas gracias! –

+0

Ah maldita sea. Pasé la semana antes de escribir el mío y lo iba a compartir. :(¡Aún así gracias por la actualización! –

2

Una idea interesante (1) - y un artículo elaborado de hecho, simplemente desnatada todo por ahora sin embargo;)

En cuanto a otras opciones NoSQL para el almacenamiento de sesión de PHP es posible que desee comprobar hacia fuera MongoSession – A PHP MongoDB Session Handler, que hace referencia a Race Conditions with Ajax and PHP Sessions también y parece abordar los problemas documentados en el ínterin:

he actualizado recientemente la biblioteca para apoyar atomic operations en tanto la sesión escribe y recoge basura para ayudar a prevenir estas condiciones de raza .

Un enfoque similar debería ser posible con Amazon DynamoDB así por medio de una combinación apropiada de Actualizaciones condicionales, contadores atómicos y Consistente Lee, ver Working with Items in Amazon DynamoDB para más detalles sobre estos conceptos y/o visita las siguientes entradas: FAQ

+0

Gracias por la rápida y detallada ¡responder! Las lecturas consistentes serían de gran ayuda. Las operaciones de aumento y decrecimiento atómico ayudarían, pero no siempre son los cambios de incremento y decremento los que deben aplicarse de forma atómica. Como tal, la falta de bloqueos podría ser un problema. ¡Gracias por apuntar en la dirección correcta! ¡Investigaré más! – webgr

1

Sus servidores son en AWS? ¿Por qué no pruebas la función ElastCache? http://aws.amazon.com/en/elasticache/

Uso CakePHP, witch compatible con DB y Memcache para almacenar sesiones. Después de un tiempo estudiando ambos, he optado por Memcache. En realidad, configuré PHP para almacenar sesiones en Memcache y configuré CakePHP para utilizar las configuraciones de las sesiones de php. De esta forma puedo separar mis instancias de Memcache para sesiones y almacenamiento en caché.

Atentamente.

+1

Esa es una opción que también estamos considerando y es extremadamente fácil de configurar. El único problema es que cuando un nodo muere o cuando la memoria caché se llena, las sesiones se perderán. Como los nodos no se mueren con frecuencia y la caché se puede resolver con una cuidadosa planificación de la capacidad, puede ser una solución factible. – webgr

+0

@webgr Perder la sesión de clientes es realmente molesto, pero generalmente se acepta. En una de mis aplicaciones es muy peligroso, pero me arriesgo. También puedo tener problemas en mi base de datos. Es el mismo tipo de riesgo. Amazon afirma que EC es realmente confiable y tiene conmutación por error, pero creo que puede perder datos en caso de falla. "Confiable: Amazon ElastiCache tiene múltiples funciones que mejoran la confiabilidad para implementaciones de producción críticas, incluida la detección y recuperación automáticas de fallas. Amazon ElastiCache se ejecuta en la misma infraestructura altamente confiable utilizada por otros servicios web de Amazon". – tvdias