2009-02-13 11 views
8

Es posible compartir una única instancia de Memcache entre múltiples proyectos.Memcache compartiendo

Supongamos que presiono un objeto dentro de la memcache en un proyecto, ¿es posible recuperar el mismo objeto de un proyecto diferente? ?

Respuesta

14

Memcache es solo una tienda de memorias. Se puede ejecutar en varias máquinas. No hay razón para que dos procesos completamente diferentes no puedan comunicarse entre sí a través de él.

Aclaro. Puede ejecutar Memcache en uno o más servidores. Puede configurar sus clientes para que hablen a un conjunto específico de instancias. Puede ejecutar dos (o más) procesos de Memcache diferentes en el mismo host (escuchando diferentes direcciones IP y/o puertos) y son completamente independientes.

Si sus dos aplicaciones hablan con la (s) misma (s) instancia (s), entonces no hay ninguna razón por la que no puedan comunicarse.

La complicación surge si habla con varias instancias y divide sus datos en particiones (es decir, los divide en diferentes instancias), entonces sus clientes necesitan saber de qué instancia obtener los datos o ponerlos. Si está utilizando la misma biblioteca cliente (por ejemplo, sus dos clientes son PHP5) entonces eso no es un drama. Si no son lo mismo, entonces tienes que manejar ese problema de alguna manera.

El otro problema si usa diferentes tecnologías es que tiene que pensar en el formato de intercambio ya que la serialización personalizada en PHP no será tan legible en Java o C#. Las opciones típicas son XML o incluso JSON.

+0

Leí completamente la pregunta, gracias por señalar eso :) –

4

Sí, siempre que cada proyecto configure los nodos de Memcache de la misma manera, y genere una clave para un elemento de caché de la misma manera, pueden compartir datos.

0

Si le preocupan los problemas de seguridad (una aplicación lee los datos de otra persona) o la intoxicación de caché entre aplicaciones, esas son las posibilidades.

Si desea aislar Memcache entre aplicaciones, puede ejecutar múltiples daemons memcached en un solo servidor, cada uno usando una parte de la memoria del servidor. Cada instancia se ejecuta en un número de puerto diferente. Puede usar reglas de firewall para asegurarse de que solo los servidores de aplicaciones específicos tengan acceso a puertos de Memcache específicos para garantizar que las aplicaciones no puedan leer o envenenar los datos de los demás.

0

Para cada uno de los proyectos, proporcionaría un método para generar claves y proyectos de partición por espacio de nombres. Entonces para key = foo del proyecto B, es almacenado/recuperado por A.foo, y foo del proyecto B se llama B.foo etc.

De esta manera debería funcionar. Sin embargo, cuando se trata de producción, este enfoque es muy desaconsejable, ya que puede estar en plena depuración (rendimiento/fiabilidad, etc.).

Mejor manera es tener varias instancias de Memcache ejecutándose en un puerto diferente, esto es más limpio en mi humilde opinión.