Redis Sharding

Redis Sharding
Cuando comience a usar Redis, es fácil creer que nunca tendrá que escalarlo más allá de la configuración predeterminada. El problema es que a medida que su aplicación crezca, eventualmente necesitará más memoria, CPU y capacidad de rendimiento para apoyar las necesidades de su negocio. En este artículo, le mostraremos cómo el clúster Redis escala con fragmentos para brindarle la capacidad adicional que necesita para administrar su negocio sin problemas y crecer en el futuro. Aprenderemos específicamente cómo el clúster Redis proporciona un alto rendimiento con fragmentos.

Escalabilidad

Hay dos enfoques comunes para escalar un servidor: escala vertical y escala horizontal. La escala o la escala vertical es donde agrega más potencia y recursos a su servidor, como más CPU, memoria y almacenamiento, lo cual es costoso. Por otro lado, la escala horizontal está agregando múltiples nodos a su grupo de recursos existentes. Esto se llama escalar. Entonces, según sus limitaciones y requisitos, depende de usted tener una instancia de servidor más grande o implementar múltiples nodos del servidor.

Suponga que tiene 100 GB de RAM y necesita tener 200 GB de datos. En este caso, tiene dos opciones:

  • Escalar agregando más RAM al sistema
  • Escalar agregando otra instancia de servidor con 100 GB de RAM

Si ha alcanzado el límite máximo de RAM dentro de su infraestructura, entonces ampliar es el enfoque ideal. Además, la escala aumentará el rendimiento de la base de datos mediante un gran margen.

Redis Sharding

Es un hecho conocido que Redis opera en un solo hilo. Por lo tanto, Redis no es capaz de utilizar múltiples núcleos de la CPU de su servidor para procesar los comandos. Por lo tanto, agregar más núcleos de CPU no le da mucho rendimiento o rendimiento con Redis. No es el caso de dividir sus datos entre múltiples instancias del servidor. Agregar varios servidores y distribuir el conjunto de datos entre los que permiten el procesamiento de las solicitudes del cliente en paralelo, lo que aumenta el rendimiento. Además, el rendimiento general puede aumentar cerca de linealmente.

Se llama a este enfoque de dividir o distribuir datos entre múltiples servidores con escala en mente fragmento. Todos los servidores que almacenan partes de datos se llaman fragmentos.

Qué fragmentación se hace - fragmento algorítmico

Una de las principales preocupaciones con el fragmento fue cómo localizar una clave dada entre múltiples nodos Redis. Debido a que una clave determinada se puede almacenar en cualquier fragmentos disponibles, consultar todos los fragmentos para encontrar una clave específica no es la mejor opción. Por lo tanto, debe haber una manera de mapear cada clave a un fragmento específico, y Redis usa una estrategia de fragmentación algorítmica.

El enfoque más común es calcular un valor hash utilizando el nombre de la tecla Redis y el módulo. Luego, divídalo por los fragmentos Redis disponibles en el sistema.

Hash_slot = CRC16 (clave) Mod 16384

Es una solución bastante buena siempre que el número total de fragmentos sea constante. Cada vez que agrega una nueva instancia de servidor Reids, el valor resultante para una clave determinada puede cambiar ya que el número total de fragmentos ha aumentado. Terminará consultando el fragmento de Redis equivocado equivocado. Por lo tanto, debe seguir el proceso de reorganización calculando el nuevo fragmento para cada clave y transferir datos al servidor correcto, que es engorroso y no una tarea trivial si su recuento total de fragmentos está aumentando de vez en cuando.

Redis usa una nueva entidad lógica llamada tragamonedas Para evitar este problema. Hay varias ranuras hash disponibles para un fragmento dado, y una sola ranura hash puede contener múltiples claves Redis. Hay 16384 ranuras hash en un clúster de base de datos Redis que permanece sin cambios. La división del módulo se realiza con el número de ranuras hash en lugar del recuento de fragmentos. Proporciona la posición correcta de la ranura hash para la clave especificada incluso cuando el número de fragmentos ha aumentado. Simplifica el proceso de reorganización moviendo las ranuras hash de un fragmento a la nueva que divide los datos en las diferentes instancias de Redis según los requisitos.

Beneficios del fragmento de redis

Redis Sharding permite varios beneficios para el sistema de su base de datos con cambios mínimos.

Alto rendimiento

Dado que Redis es un solo subproceso, el procesamiento de múltiples solicitudes de clientes no puede procesar en paralelo utilizando múltiples núcleos de CPU. Entonces, agregar nuevos fragmentos o instancias de servidor garantiza que pueda realizar operaciones Redis en paralelo. Aumenta las operaciones por segundo en su base de datos Redis, lo que eventualmente le brinda un alto rendimiento.

Alta disponibilidad

Con el enfoque de fragmentación, el clúster Redis puede configurar una arquitectura maestra-replica que garantice una alta disponibilidad y durabilidad.

Leer réplicas

El fragmento le permite mantener una copia exacta de sus datos y proporcionar operaciones de lectura a través de instancias de redis separadas, lo que aumenta el rendimiento de su ejecución de consulta de lectura.

Además de estos beneficios, el fragmento puede causar situaciones de cerebro dividido cuando tiene un número par de fragmentos en el clúster Redis. Entonces, se recomienda mantener un número impar de fragmentos en su clúster Redis.

Conclusión

Para resumir, Redis Sharding está dividiendo datos entre múltiples servidores, lo que permite escalar y alto rendimiento para su base de datos. Como se discutió, Redis utiliza una estrategia de fragmentación algorítmica para apuntar las solicitudes de los clientes al fragmento correcto. Esto tiene algunos inconvenientes cuando aumenta el número total de fragmentos. Entonces, en lugar del número total de fragmentos, Redis usa el número de ranuras hash para calcular el fragmento apropiado. Con el fragmento introducido, las bases de datos de Redis proporcionan alta disponibilidad, alto rendimiento y alto rendimiento.