60 votes

Est-il recommandé de stocker des sessions PHP dans MemCache?

Je travaille avec un couple de Serveurs Web derrière un répartiteur de Charge et je peux activer Collant Sessions de tenir un utilisateur à l'un des Serveurs Web - cela fonctionne...

J'ai lu à propos de Sessions PHP & MemCache. Je dois dire que ce que j'ai lu est une touche à confusion, comme certaines pages de dire que c'est une bonne idée et d'autres le contraire.

Questions:

  1. est-il possible de garder les sessions php dans memcache?
  2. est-il préférable d'utiliser le collant séances de memcache?
  3. quels sont les problèmes avec les sessions php dans memcache - note: je peux obtenir suffisamment de mémoire cache (amazon si sa extensible).

merci

69voto

1: OUI. Et je vous recommande fortement de stocker les sessions PHP dans Memcached. Voici pourquoi:

Memcached est idéal pour le rangement de petits morceaux de données qui sont souvent accessibles par la base de données et système de fichiers.

Memcached a été conçu spécifiquement pour les sessions. Il était à l'origine le fruit de l'imagination du développeur en chef de livejournal.com et, plus tard, également utilisé pour mettre en cache le contenu des messages. Le bénéfice est immédiat: la plupart de l'action se déroulait dans la mémoire. Temps de chargement de Page grandement améliorée.

Heureusement, PHP et Apache ont une mise en œuvre simple pour gérer les sessions avec Memcached. Il suffit de l'installer avec quelques commandes shell et

changer votre php.paramètres ini quelque chose de similaire à:

(prise de http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/)

 session.save_handler = memcache
 ; change server:port to fit your needs...
 session.save_path="tcp://server:port?persistent=1&weight=1&
timeout=1&retry_interval=15"

La clé est la session.save_path

Il n'a plus de point à un parent chemin d'accès du fichier sur votre serveur. APC a été mentionné - APC pour la mise en cache de .php les fichiers utilisés par le programme. APC, Memcached permettra de réduire les IO de façon signicative et laisser Apache libre pour servir de ressources,tels que des images, plus rapide.

2: Aucun

3: Les fondamentaux de l'inconvénient de l'utilisation de Memcached est la volatilité des données

Les données de Session n'est pas persistant dans Memcached. Donc, si le serveur tombe en panne, toutes les données en mémoire sont perdues. Tout le monde aura à nouveau vous connecter.

Et puis vous avez de la consommation de mémoire...

Rappelez-vous: les sessions sont stockées dans la mémoire. Si votre site traite une grande quantité d'utilisateurs simultanés, vous pouvez avoir à débourser un peu d'argent supplémentaire pour une plus grande allocation de la mémoire.

Enfin, le temps de latence (pas bête)

Cela met tout en perspective Sauf si vous prévoyez de garder toute l'action sur une seule machine, vous finirez par l'échelle de votre cluster memcached sur un réseau de serveurs. (C'est la mise à l'échelle à l'horizontale), la Latence peut avoir un effet dramatique sur les performances et le débit, lorsqu'il n'est pas abordé avec la quantité appropriée de matériel pour gérer les exigences de la charge.

Mes instances Amazon EC2, par exemple, ont un temps de latence d'environ 80 ms, et la plus coûteuse dans mon application prend environ 70 ms pour exécuter et mettre en cache une page unique. Certains de la plus rapide des pages utilisées pour prendre 1 à 2 ms, mais maintenant, prenez 81 ms 80 ms peine. Ainsi, au lieu de penser que l'ajout de 2 serveurs "triple" de mes capacités, je serais mal. De 5 à 10 serveurs, peut-être? Il n'y a pas de formule pour déterminer le nombre optimal après la mise à niveau, comme le seul moyen de le savoir est de mesurer le trafic comme il vient, et de tourner de nouveaux serveurs lorsque le besoin arrive. Un autre $ $ $ $ contrepartie, mais vous pouvez mettre à l'échelle de l'infini sur le bon marché, parce que l'obtention de plus de bande passante avec plus de matériel a toujours été la partie la plus facile!

9voto

Brenton Alker Points 4739

1. Oui, il est possible de garder les sessions PHP dans memcached.

L'extension memcache est même livré avec un gestionnaire de session qui prend très peu de configuration à se lever et courir. http://php.net/manual/en/memcached.sessions.php

2. Memcache/Collant Sessions

Je ne sais pas vraiment ce qui est "mieux". Je sens que cela va être un de ces "cela dépend" des réponses. Il dépend sans doute vos raisons pour l'équilibrage de charge. Si un petit nombre d'utilisateurs causer beaucoup de charge de chaque, ou si c'est un grand nombre à l'origine une petite charge de chacun.

3. Les inconvénients de Memcache

Il y a probablement 2 principaux inconvénients à l'utilisation de memcache pour des séances de stockage.

Tout d'abord, il est instable. Cela signifie que, si l'un de vos memcached cas est redémarré ou plantages etc. les sessions stockées dans cette instance sont perdus. Tandis que si elles ont été à l'aide de fichiers de sessions, ils seront toujours là lorsque le serveur renvoie.

En second lieu, et il est probablement plus pertinent, memcached n'est pas une garantie de la persistance, c'est uniquement destinée à être un cache. Les données peuvent être effacées à partir de memcached, à tout moment, pour n'importe quelle raison. Alors que, en réalité, les seules raisons données doivent être purgés est si le cache est proche de sa limite de taille. Le moins récemment accédé à des données sera expulsé. Encore une fois, ce ne serait pas un problème, tant que l'utilisateur est sans doute allé si la session est obsolète, mais cela dépend de vos besoins.

2voto

indika Points 184

Que mon point de vue de ses pas recommandé de stocker les sessions dans Memcached.Si une session disparaît, souvent, l'utilisateur est déconnecté,Si une partie de cache disparaisse ou soit en raison d'un crash matériel, il ne devrait pas causer de vos utilisateurs notable de la douleur.Selon le memcached site, "memcached est une haute performance, une mémoire distribuée objet système de mise en cache, de nature générique, mais destiné à une utilisation dans l'accélération des applications web dynamiques en atténuer la charge de base de données." Ainsi, alors que le développement de votre application, n'oubliez pas que vous devez avoir un mécanisme de secours pour récupérer les données une fois qu'il n'est pas trouvé dans le serveur Memcache.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X