Au travail, nous faisons presque tout en Java et Perl, mais je voulais construire une fonctionnalité en utilisant PHP et les sessions. Certains peeps ont pensé que c'était une mauvaise idée d'essayer de faire des sessions PHP sur notre système, parce qu'il est distribué à de nombreux serveurs. Quel serait le problème spécifique?Les sessions PHP sont-elles difficiles à mettre à l'échelle sur un système distribué?
Répondre
La réponse à votre question spécifique, quel serait le problème, réside dans le fait que par défaut PHP stocke ses sessions dans des fichiers sur le système de fichiers. Pour un seul serveur Web servant des requêtes, ce n'est pas un problème car vos données de session seront toujours disponibles. Mais que se passerait-il si vous utilisiez deux serveurs Web à charge équilibrée pour répondre aux demandes? Imaginez que vous tapiez sur le premier serveur Web avec une requête, ce qui crée votre fichier de session sur son système de fichiers. Ensuite, votre prochaine demande touche le deuxième serveur Web. Le deuxième serveur Web ne verra bien sûr pas le fichier de session. Pour l'utilisateur, vous pouvez vous connecter à un site Web, puis soudainement être déconnecté.
Ce n'est pas un problème spécifique à PHP, et il est très courant. La solution consiste à stocker des données de session dans une zone commune. La méthode la plus courante consiste à stocker les données de session dans une base de données accessible à tous les serveurs Web ou dans un serveur de mémoire cache partagé tel que memcached.
Les sessions persistantes sur plusieurs serveurs (également appelées clustering de session) sont un problème courant pour la mise à l'échelle des applications Web et ne sont pas spécifiques à PHP. PHP propose plusieurs solutions pour le gérer, telles que Zend Platform (serveur d'applications commerciales) et Msession (extension).
Vous pouvez également utiliser une session personnalisée gestionnaire de sauvegarde:
http://www.php.net/manual/en/function.session-set-save-handler.php
Je n'ai jamais essayé, mais il vous définissez votre propre sauvegarde/fonctions de lecture, de sorte que vous pouvez mettre en œuvre une base de données ou un backend nfs partagé sans avoir besoin d'installer des extensions.
Aussi Msession, qui a été suggéré par @Eran Galperin, semble très intéressant comme une alternative à celui que j'ai mentionné auparavant.
Ceci est une excellente réponse, et je vais utiliser cette approche. Merci! – woody121
Tout à fait une question vague, mais je dirais que le problème est plus grand que mentionné dans les réponses. Bien sûr, vous pouvez remplacer le chargement et l'enregistrement des cookies, mais cela a également un coût. Par exemple, vous devrez tenir compte des scénarios/questions suivants:
- Si vous placez les cookies sur un autre hôte, quelle incidence cela aura-t-il sur la vitesse de vos cookies? Cela dépend évidemment du nombre d'écritures/lectures que vous faites.
- Est-ce que vous faites cela pour augmenter la vitesse ou avoir un basculement? La réponse mènera certainement à différentes solutions:
- Dans le cas où vous faites cela pour le basculement, comment allez-vous gérer si votre serveur web ne peut pas accéder à votre magasin de session parce que la liaison réseau tombe en panne? Que faire si votre magasin de sessions tombe en panne? Vous devrez résoudre ceci en utilisant une sorte de réplication maître-maître, en exécutant éventuellement ce magasin de sessions distribué sur la même machine que le serveur web pour une haute disponibilité supplémentaire (si toutes les sessions peuvent tenir dans la mémoire). Jetez un oeil à Riak ou similaire pour la réplication maître-maître.
- Dans le cas où vous faites simplement cela pour la vitesse, j'utiliserais apache, nginx ou haproxy (le plus rapide) pour simplement équilibrer la charge en fonction de l'adresse IP du client. De cette façon, vous n'avez pas à vous soucier de la configuration d'un magasin de sessions distribué. Bien sûr, si l'une de vos instances PHP tombe en panne, vos utilisateurs perdront leurs cookies, mais ce n'est peut-être pas un problème. C'est à vous.
est plus facile memcached ou Redis.
ici est de savoir comment faire en Redis - nous l'utilisons à l'heure actuelle: http://redis4you.com/articles.php?id=001&name=Redis+as+session+handler+in+PHP
- 1. À quel niveau dois-je mettre en œuvre la communication entre les nœuds sur un système distribué?
- 2. Dans Erlang, quelle est la meilleure façon de mettre à niveau un système distribué?
- 3. Système de connexion (PHP) Cookies et Sessions
- 4. À la recherche d'une recommandation sur le verrouillage d'enregistrement dans un système distribué
- 5. Question rapide sur les sessions en PHP
- 6. Cross domain PHP Sessions
- 7. Comment utiliser les sessions php dans xslt?
- 8. Sessions PHP Expiration inattendue
- 9. PHP: règles de pouce pour les sessions
- 10. Tout système de cache distribué permettant de baliser le contenu?
- 11. Pourquoi les programmes sécurisés sont-ils si difficiles à développer (pour moi)?
- 12. quelques questions concernant les sessions php
- 13. PHP - Sessions - Sécurité
- 14. Numéro Ajax, PHP et Sessions
- 15. Développement d'un système distribué sous forme de grille
- 16. Travailler avec des sessions - PHP
- 17. Les applications certifiées Windows Logo (TM) sont-elles plus difficiles à écrire en Java?
- 18. Problème avec les sessions et la redirection php
- 19. PHP + rediriger avec des sessions
- 20. Quel symbole représente un cache distribué?
- 21. Quel système de contrôle de version distribué a les meilleures interfaces graphiques pour Windows?
- 22. Implémentation de la sécurité sur les sessions
- 23. Quelles sont les fonctionnalités à inclure dans un système de commerce électronique écrit en PHP?
- 24. Comme il est facile de mettre à jour les applications Symfony de 1.1 à 1.2
- 25. Impossible d'appeler les commandes système et les scripts shell à partir de PHP Fedora 10
- 26. Maquillages difficiles avec blocs élastiques centrés
- 27. Mettre à jour l'URL sur un appel AJAX?
- 28. Comment les sessions PHP sont-elles sauvegardées par défaut?
- 29. Disposition efficace pour un serveur python distribué?
- 30. veulent mettre à jour l'application sur l'air
Comme le mentionne @azkotoki ci-dessous, une partition partagée comme une monture NFS supportée par NAS fonctionne également. La bonne chose à ce sujet est qu'il n'implique pas de changements de code. Connectez simplement le répertoire de session local à NFS. – gerard
mais que se passe-t-il si les domaines sont dans des centres de données distincts? – Dannyboy