En la documentación de Django que dice esto:¿Cómo maneja django múltiples servidores de memcached?
...
Una característica excelente de Memcached es su capacidad para compartir caché sobre varios servidores. Esto significa que puede ejecutar daemons de Memcached en varias máquinas , y el programa tratará el grupo de máquinas como una única caché , sin la necesidad de duplicar los valores de caché en cada máquina. Para aproveche esta función, incluya todas las direcciones de servidor en UBICACIÓN, ya sea separadas por punto y coma o como una lista.
...
Django's cache framework - Memcached
¿Cómo funciona exactamente este trabajo? He leído algunas respuestas en este sitio que sugieren que esto se lleva a cabo filtrando los servidores a través de hash de las claves.
Multiple memcached servers question
How does the MemCacheStore really work with multiple servers?
Eso está bien, pero necesito una respuesta mucho más específico y detallado que eso. Usando django con pylibmc o python-memcached, ¿cómo se realiza este sharding? ¿Importa el orden de las direcciones IP en la configuración? ¿Qué sucede si dos servidores web diferentes que ejecutan la misma aplicación django tienen dos archivos de configuración diferentes con las direcciones IP de los servidores memcached en un orden diferente? ¿Conseguirá eso que cada máquina utilice una estrategia de fragmentación diferente que cause duplicados de claves y otras ineficiencias?
¿Qué sucede si una máquina en particular aparece en la lista dos veces? Por ejemplo, ¿qué pasaría si tuviera que hacer algo como esto donde 127.0.0.1 es realmente la misma máquina que 172.19.26.240?
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'127.0.0.1:11211',
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
¿Qué sucede si uno de los servidores de memcached tiene más capacidad que los demás? Si la máquina uno tiene como 64 MB de memoria y la máquina 2 tiene 128 MB, ¿tendrá en cuenta el algoritmo de fragmentación y otorgará a la máquina 2 una mayor proporción de claves?
También he leído que si se pierde un servidor memcached, entonces esas claves se pierden. Eso es obvio cuando se trata de fragmentación. ¿Qué es más importante es qué sucederá si un servidor de memcached se cae y dejo su dirección IP en el archivo de configuración? ¿Django/memcached simplemente no obtendrá ninguna clave que se haya fragmentado en ese servidor fallido, o se dará cuenta de que el servidor ha fallado y se le ocurrirá una nueva estrategia de fragmentación? Si hay una nueva estrategia de fragmentación, ¿toma inteligentemente las claves que originalmente estaban destinadas para el servidor fallido y las divide entre los servidores restantes, o se le ocurre una nueva estrategia como si el primer servidor no existiera y Como resultado, las llaves se duplican?
Intenté leer el código fuente de python-memcached, y no pude resolver esto. Planeo intentar leer el código de libmemcached y pylibmc, pero pensé que preguntar aquí sería más fácil si alguien ya lo sabía.
Gracias! Esto no respondió completamente todas mis preguntas, pero me indicó la dirección correcta para responderlas por mi cuenta. Lo único que obtuviste mal es que el orden de los servidores sí importa en un caso. Si tiene varios servidores web y desea que todos ellos coloquen las mismas claves en los mismos servidores de memcached, debe configurarlos con la misma lista de servidores en el mismo orden con los mismos pesos. – Apreche