Red de conocimiento informático - Problemas con los teléfonos móviles - RedLock - candado rojo

RedLock - candado rojo

¿Qué es Red Lock?

RedLock es un bloqueo distribuido implementado en base a redis, que garantiza las siguientes características:

Exclusividad mutua: en un momento dado, solo un cliente puede mantener un bloqueo;

Evite el punto muerto: cuando un cliente obtiene un bloqueo, incluso si se produce una partición de red o el cliente está inactivo, no se producirá el punto muerto (utilice el tiempo de supervivencia de la clave)

Tolerancia a fallas: como; siempre que las instancias de Redis en la mayoría de los nodos se ejecuten normalmente, pueden proporcionar servicios al mundo exterior y agregar o liberar bloqueos;

Non-RedLock no puede satisfacer la exclusividad mutua porque el motivo se ha explicado anteriormente.

Algoritmo RedLock

Supongamos que hay N nodos maestros de Redis, que son independientes entre sí (no se requiere maestro-esclavo u otro sistema de coordinación). Se recomienda que n sea un número impar~

El cliente debe realizar las siguientes operaciones al adquirir el bloqueo:

Obtener la marca de tiempo actual, en microsegundos de una única marca de tiempo.

Intente adquirir bloqueos de N nodos utilizando el mismo lockName y lockValue. (Al adquirir una cerradura, se requiere que el tiempo de espera para adquirir la cerradura sea mucho más corto que el tiempo de liberación de la cerradura. Por ejemplo, si el tiempo de liberación de la cerradura es de 10 segundos, entonces el tiempo de espera debe ser de 5 a 50 milisegundos; para evitar la necesidad de que el cliente se cuelgue debido a la instancia de redis Espere más para devolver el bloqueo, es decir:

Al adquirir un bloqueo, el tiempo de espera requerido para adquirir el bloqueo es mucho menor que el tiempo de liberación del bloqueo Por ejemplo, si el tiempo de liberación del bloqueo es de 10 segundos, entonces el tiempo de espera debe ser de 5 a 50 milisegundos para evitar que el cliente tenga que esperar más para devolver el bloqueo debido a que la instancia de Redis se bloquea, es decir:

Al adquirir un bloqueo, el tiempo de espera requerido para adquirir el bloqueo es mucho más corto que el tiempo de liberación del bloqueo; si la instancia de Redis no está disponible, el cliente debe continuar obteniendo el bloqueo de la siguiente instancia de Redis)

Cuando finaliza el proceso de obtención de bloqueos de N nodos, si el cliente puede obtener bloqueos de la mayoría de los nodos (N/ 2 + 1) Si el bloqueo se adquiere con éxito y el tiempo para adquirir el bloqueo es menor que la falla tiempo, se puede considerar que el cliente ha adquirido exitosamente el candado. (Tiempo para adquirir el bloqueo = marca de tiempo actual - marca de tiempo del paso 1)

Después de que el cliente adquiere exitosamente el bloqueo, el tiempo de validez real del bloqueo = tiempo de validez del bloqueo establecido - tiempo para adquirir el bloqueo .

Después de que el cliente no logra adquirir el bloqueo, las instancias de Redis en N nodos liberarán el bloqueo, incluso si no logran agregar el bloqueo con éxito.

¿Por qué se recomienda que N sea un número impar?

Razón 1: De acuerdo con el principio de máxima tolerancia a fallas y ocupando la menor cantidad de recursos de servicio, 2N+1 y 2N+2 tienen la misma tolerancia a fallas, por lo que se usa 2N+1, por ejemplo, 2; de 5 servidores pueden estar inactivos, la tolerancia a fallas es 2, y 6 servidores solo pueden permitir que 2 estén inactivos, y la tolerancia a fallas es 2, porque más de la mitad de los nodos deben sobrevivir para ser considerados normales.

Razón 2: Suponiendo que hay 6 nodos de Redis, el cliente 1 y el cliente 2 obtienen el mismo recurso de bloqueo de la instancia de Redis al mismo tiempo, entonces los resultados posibles son: el cliente 1 obtiene 3 bloqueos y el cliente 2 obtiene el mismo recurso de bloqueo de la instancia de Redis al mismo tiempo. El cliente 2 adquiere 3 bloqueos y, como ninguno excede la mitad, ni el cliente 1 ni el cliente 2 pueden adquirir el bloqueo, lo cual no es un problema para los nodos impares.