Relojes híbridos sin relojes atómicos
Cómo ordena TeselaDB las versiones de los documentos con relojes lógicos híbridos y qué pasa cuando dos relojes no coinciden.
TeselaDB
Equipo de TeselaDB
2 min de lectura
- HLC
- relojes
- consistencia
Para que una lectura vea un estado coherente de la base, cada versión de un documento necesita una marca que diga en qué orden ocurrió. TeselaDB usa relojes lógicos híbridos (HLC). No necesita un reloj central ni relojes atómicos.
Qué lleva una marca
marca HLC = [ 8 bytes: milisegundos físicos ][ 4 bytes: contador lógico ]Cada marca junta 8 bytes de milisegundos del reloj físico y 4 bytes de un contador lógico. Cada nodo avanza su marca con su reloj. Al recibir un mensaje con una marca mayor que la suya, la adopta, así que si un evento de un nodo causa otro en un nodo distinto, el segundo evento siempre lleva la marca mayor.
La ventana de incertidumbre
Los relojes de dos nodos pueden diferir hasta 250 ms, porque cada uno se mantiene a 125 ms o menos de la mediana del clúster. Una lectura que encuentra una versión dentro de esa ventana por delante de su marca no sabe si ocurrió antes que ella. En ese caso se reinicia a una marca posterior para verla, así que algunas lecturas tardan un poco más. A cambio, las lecturas nunca devuelven un resultado que contradiga el orden real de las escrituras.
Cuando un reloj se aleja
Un nodo cuyo reloj se aleja más de 125 ms de la mediana cede sus liderazgos hasta volver al margen. Cada máquina del clúster necesita NTP. Sin él, eso le pasa a un nodo a menudo. Más detalles en Relojes híbridos y Consistencia y aislamiento.