Relojes híbridos
Cómo ordena TeselaDB las versiones sin un reloj central.
TeselaDB ordena las versiones de los documentos con relojes lógicos híbridos (HLC). No necesita un reloj central ni relojes atómicos.
Cómo funciona
marca HLC = [ 8 bytes: milisegundos físicos ][ 4 bytes: contador lógico ]
nodo A ───●────────────●─────▶ (reloj físico + contador)
\ ▲
mensaje │ el receptor avanza su marca si la recibida es mayor
▼ │
nodo B ──────●────────●──────▶Cada marca junta 8 bytes de milisegundos del reloj físico y 4 de un contador lógico. Cada nodo avanza su marca con su reloj, y al recibir un mensaje con una marca mayor, la adopta. Así, si un evento causa otro, el segundo siempre tiene una marca mayor.
Los relojes de dos nodos pueden diferir hasta 250 ms, porque cada uno se mantiene a 125 ms o menos de la mediana. Una lectura que encuentra una versión dentro de esa ventana por delante de su marca no sabe si ocurrió antes que ella, así que se reinicia a una marca posterior para verla.
Qué implica para tu aplicación
Las lecturas nunca devuelven un resultado que contradiga el orden real de las escrituras. A cambio, algunas se reinician y tardan un poco más.
Límites
Un nodo cuyo reloj se aleja más de 125 ms de la mediana cede sus liderazgos hasta volver al margen. Sin NTP, eso ocurre a menudo.