2011-02-23 3 views
3

Je travaille sur une application web PHP déployée sur Amazon Web Services. Nous avons des équilibreurs de charge devant les serveurs d'applications à échelle automatique.Sessions PHP sur les serveurs Auto-Scaling

Le problème auquel nous sommes confrontés en ce moment concerne les sessions. Alors que les sessions collantes seraient une solution raisonnable, nous aimerions persister des sessions pendant assez longtemps (idéalement des semaines). Cela risque de compromettre les performances de l'équilibreur de charge dans le temps. En outre, l'utilisation de la mise à l'échelle automatique signifie que, de temps en temps, nous supprimerons un serveur et perdrons ainsi toutes les sessions actives. Bien sûr, nous pourrions simplement utiliser une base de données commune pour stocker des sessions, mais je suis un peu préoccupé par les performances si chaque demande nécessite un autre aller-retour à la base de données.

Je vous serais reconnaissant si vous pouviez suggérer des solutions qui ont fonctionné pour vous, ou des idées que nous pourrions essayer.

Merci d'avance pour votre aide, Ross

+0

Avez-vous pensé aux serveurs de session centralisés avec des sessions basées sur memcahed/db ?. – Zimbabao

+0

@Zimbabao Cached MySQL est notre favori en ce moment. Est-ce que cela a bien fonctionné pour vous? –

+1

Session db utilisée pour 2 boîtiers frontaux. La solution memcached me convient aussi, vérifiez ici http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/ – Zimbabao

Répondre

2

J'utiliseraient une solution de session personnalisée où les sessions sont stockées dans le datatabase. De cette façon, tous les serveurs Web auront accès au même magasin de sessions et vous pourrez décider pour vous-même combien de temps une session doit être conservée.

Vous pouvez soit construire quelque chose qui fonctionne avec des sessions normales PHP ou une classe complètement autonome pour les gérer.

J'ai fait quelque chose de similaire pour partager une session entre asp et asp.net sur différents services et cela fonctionne. Si les performances posent problème, utilisez une base de données séparée, un cluster memcached ou mysql (également stocké en mémoire) ou un mongoDB pour les sessions.