seguras - ¿Se recomienda almacenar sesiones de PHP en MemCache?
sesiones php login (4)
1. Sí, es posible mantener las sesiones de PHP en memcached.
La extensión de memcache incluso viene con un controlador de sesión que requiere muy poca configuración para ponerse en marcha. http://php.net/manual/en/memcached.sessions.php
2. Memcache / Sesiones Sticky
Realmente no sé cuál es "mejor". Siento que esta va a ser una de esas respuestas "depende". Probablemente depende de sus razones para equilibrar la carga. Si un pequeño número de usuarios causa mucha carga cada uno, o si es un gran número que causa una pequeña carga cada uno.
3. Contras de Memcache
Probablemente hay 2 contras principales para usar memcache para el almacenamiento de sesiones.
En primer lugar, es volátil. Esto significa que si una de sus instancias de memcached se reinicia / se bloquea, etc., se perderán todas las sesiones almacenadas en esa instancia. Mientras que si estuvieran usando sesiones basadas en archivos tradicionales, seguirán allí cuando el servidor regrese.
En segundo lugar, y probablemente más relevante, memcached no garantiza la persistencia, solo está destinado a ser un caché. Los datos se pueden eliminar de memcached en cualquier momento, por cualquier motivo. Mientras que, en realidad, los únicos motivos por los que se deben purgar los datos es si la memoria caché se acerca a sus límites de tamaño. Se expulsarán los datos a los que se haya accedido recientemente. Nuevamente, esto podría no ser un problema, ya que el usuario probablemente se haya ido si su sesión está agotada, pero depende de sus necesidades.
Estoy trabajando con un par de servidores web detrás de un Load Balancer y puedo permitir que Sticky Sessions mantenga a un usuario en un servidor web específico, esto funcionará.
He estado leyendo sobre PHP Sessions & MemCache. Debo decir que lo que he leído es un poco confuso, ya que algunas páginas dicen que es una buena idea y otras lo opuesto.
Preguntas:
- ¿Es posible mantener sesiones php en memcache?
- ¿Es mejor usar sesiones pegajosas sobre memcache?
- ¿Cuáles son los problemas con las sesiones de php en memcache? Nota: puedo obtener suficiente caché (Amazon, por lo que es expandible).
Como mi punto de vista no es recomendable almacenar sesiones en Memcached. Si una sesión desaparece, a menudo el usuario se desconecta, si una parte de la memoria caché desaparece o bien debido a una falla del hardware, no debería causarle a los usuarios un dolor notable. De acuerdo con el sitio memcached, "memcached es un sistema de almacenamiento en caché de objetos de memoria distribuida de alto rendimiento, de naturaleza genérica, pero diseñado para acelerar las aplicaciones web dinámicas al aliviar la carga de la base de datos". Así que al desarrollar su aplicación, recuerde que debe tener una mecanismo de recuperación para recuperar los datos una vez que no se encuentran en el servidor Memcached.
Si desea utilizar la extensión "memcacheD" y no "memcache" (hay dos extensiones diferentes) para el control de la sesión, debe prestar atención para modificar php.ini .
La mayoría de los recursos web de Google se basan en memcache porque es una versión anterior a memcacheD. Ellos dirán lo siguiente:
session.save_handler = memcache session.save_path = "tcp: // localhost: 11211"
Pero no es válido cuando se trata de memcacheD.
Deberías modificar php.ini así:
session.save_handler = memcached session.save_path = "localhost: 11211"
No hay un identificador de protocolo.
1: SI. Y recomiendo encarecidamente almacenar sesiones de PHP en Memcached. Este es el por qué:
Memcached es ideal para almacenar pequeños fragmentos de datos a los que la base de datos y el sistema de archivos acceden con frecuencia.
Memcached fue diseñado específicamente para sesiones. Originalmente fue una creación del desarrollador líder de livejournal.com, y luego se usó también para almacenar en caché el contenido de las publicaciones de los usuarios. El beneficio fue inmediato: la mayor parte de la acción se llevó a cabo en la memoria. Los tiempos de carga de la página han mejorado mucho.
Afortunadamente, PHP y Apache tienen una implementación fácil para manejar sesiones con Memcached. Simplemente instale con unos pocos comandos de shell
ejemplo para debian:
sudo apt-get -t stable install php5-memcached
y
Cambie su configuración de php.ini a algo similar a:
(tomado 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 clave es la session.save_path
Ya no apuntará a una ruta de archivo relativa en su servidor. Se mencionó APC: APC para el almacenamiento en caché de archivos .php utilizados por el programa. APC y Memcached reducirán significativamente la IO y dejarán a Apache libre para servir recursos, como imágenes, más rápido.
2: No
3: la desventaja fundamental de usar Memcached es la volatilidad de los datos
Los datos de sesión no son persistentes en Memcached. Entonces, si y cuando el servidor falla, todos los datos en la memoria se pierden. Todos tendrán que iniciar sesión de nuevo.
Y luego tienes consumo de memoria ...
Recuerda: las sesiones se almacenan en la memoria. Si su sitio web maneja una gran cantidad de usuarios concurrentes, es posible que deba desembolsar un poco de dinero extra para una mayor asignación de memoria.
Por último, la latencia (no estúpida).
Esto lo pone todo en perspectiva. A menos que planee mantener toda la acción en una máquina, eventualmente escalará su clúster de memcached a través de una red de servidores. (Esto se está escalando horizontalmente) La latencia puede tener un efecto dramático en el rendimiento y el rendimiento, cuando no se aborda con la cantidad adecuada de hardware para manejar los requisitos de carga.
Mis instancias de Amazon EC2, por ejemplo, tienen una latencia de aproximadamente 80 ms, y la operación más costosa en mi aplicación toma aproximadamente 70 ms para ejecutar y almacenar en caché una sola página. Algunas de las páginas más rápidas solían tomar 1-2 ms, pero ahora toman 81 ms con la penalización de 80 ms. Entonces, en lugar de pensar que agregar 2 servidores ''triplicará'' mi capacidad, estaría equivocado. 5-10 servidores, tal vez? No existe una fórmula para determinar el número óptimo después de la actualización, ya que la única forma de saberlo es medir el tráfico a medida que se produce, y crear nuevos servidores cuando surja la necesidad. Otra consideración de $ $ $ $, pero puede escalar hasta el infinito a bajo costo, ¡porque obtener más ancho de banda con más hardware siempre ha sido la parte fácil!