sql >> Base de Datos >  >> NoSQL >> Redis

Hashing consistente como una forma de escalar las escrituras

Hay dos razones para usar varios nodos en un clúster:

  • Sharding para limitar la cantidad de datos almacenados en cada nodo
  • Duplicación para reducir la carga de lectura y permitir que se elimine un nodo sin pérdida de datos.

Los dos son fundamentalmente diferentes, pero puede implementar ambos:use hash consistente para apuntar a un conjunto de nodos con una configuración estándar maestro/esclavo en lugar de un solo nodo.

Si el clúster es su almacén de datos principal en lugar de un caché, necesitará una estrategia de redistribución diferente que incluya copiar los datos.

Mi implementación se basa en que el cliente elija uno de los cubos de 64k para un hash y tenga una tabla que asigne ese cubo a un nodo. Inicialmente, todos se asignan al nodo #1.

Cuando el nodo n.° 1 se vuelve demasiado grande, su esclavo se convierte en el nodo maestro n.° 2 y la tabla se actualiza para asignar la mitad de las claves del nodo n.° 1 al nodo n.° 2. En este punto, todas las lecturas y escrituras funcionarán con la nueva asignación y solo necesita limpiar las claves que ahora están en el nodo incorrecto. Según los requisitos de rendimiento, puede verificar todas las claves a la vez o verificar una selección aleatoria de claves como lo hace el sistema de caducidad.