Bueno, podrías escribir libros sobre eso, pero el principio básico es que hay algunos enfoques diferentes.
El enfoque más común y sensato para el almacenamiento en caché es la fragmentación. Lo que significa que los datos se sotran solo en un servidor y se usa algún método para determinar en qué servidor se encuentra. Por lo tanto, se puede obtener desde este mismo servidor y solo se trata de un servidor.
Obviamente, esto funciona bien en entornos de clave/valor como memcached.
Una práctica común es tomar un hash criptográfico de la clave. Calcule este hash MOD número de servidores y el resultado es el servidor que almacenará y obtendrá los datos.
Este procedimiento produce un equilibrio más o menos igual.
Cómo se hace exactamente en memcached no sé pero cierto tipo de hash seguro.
Pero tenga en cuenta que esta tecnología no está muy disponible. Entonces, si un servidor falla, las entradas desaparecen. Entonces, obviamente, solo puedes usar esto para propósitos de almacenamiento en caché.
Otras técnicas, donde, por ejemplo, es necesaria una alta disponibilidad de recursos, que tardan en calcularse y se calientan automáticamente en el contexto, implican la replicación.
La forma más común en los entornos de almacenamiento en caché es la replicación maestro-maestra con la resolución de conflictos de la última marca de tiempo. Lo que básicamente significa que cada servidor obtiene los datos de everyserver que aún no están en el servidor local (esto se hace usando registros de replicación y compensaciones de bytes). Si hay un conflicto, se utiliza la última versión (se ignora el ligero desfase temporal entre servidores).
Pero en otros entornos donde, por ejemplo, solo se escribe muy poco pero se lee mucho, a menudo hay una cascada en la que solo participan uno o pocos servidores maestros y el resto es pura replicación de lectura.
Pero estas configuraciones son muy raras porque la fragmentación descrita como bove ofrece el mejor rendimiento y en entornos de almacenamiento en caché la pérdida de datos es mayormente tolerable. por lo que también es el predeterminado para memcached.
Gracias por preguntar esto. Entonces, en general, parece que más escribir/leer es el objetivo y no la redundancia. Estoy buscando redundancia y al menos confirma lo que pensaba. – Till
[Esta pregunta] (http://stackoverflow.com/questions/4038094/using-multiple-memcache-servers-in-a-pool/4038108#4038108) no es exactamente igual, pero mi respuesta allí debe responder pregunta también. –
gracias ... ¿Sabe si el cliente de Memcached equilibra las solicitudes de escritura automáticamente? o va al primer servidor hasta que se llena y luego al segundo hasta que se llena el segundo y el tercero, etc. – Stann