La sincronización en los sistemas distribuidos se logra a través de relojes. Existen 2 tipos de relojes: los físicos y los lógicos. Los primeros están relacionados con el tiempo real mientras que en los segundos lo importante es el orden de los eventos.
Relojes Físicos.
Las computadoras poseen un circuito para el registro del tiempo conocido reloj, el cual es un cronómetro que consiste en un cristal de cuarzo de precisión sometido a una tensión eléctrica que Oscila con una frecuencia bien definida que depende de:
- A la forma en que se corte el cristal.
- El tipo de cristal.
- La magnitud de la tensión.
- Cada oscilación del cristal decrementa en 1 al contador.
- Cuando el contador llega a 0: genera una interrupción.
- Contador se vuelve a cargar mediante el registro mantenedor.
- Se puede programar un cronómetro para generar una interrupción tantas veces por segundo.
- Cada interrupción se denomina marca de reloj.
Sesgo del reloj y deriva del reloj
Los relojes de computadora, como cualquier otro, tienden a no estar en perfecto acuerdo. La diferencia instantánea entre las lecturas de dos relojes se llama su sesgo. Además, los relojes a base de cristal utilizados en las computadoras son, como cualquier otros relojes, sujetos a la deriva del reloj, lo que significa que cuentan el tiempo a diferentes velocidades muy divergente.
UTC
Los relojes de computadora se pueden sincronizar con fuentes externas de tiempo muy precisas. La hora universal coordinada: abreviada como UTC (del equivalente francés) es un estándar internacional para el cronometraje. Las señales UTC se sincronizan y transmiten regularmente desde estaciones terrenas de radio y satélites que cubren muchas partes del mundo.
Las fuentes satelitales incluyen el Sistema de Posicionamiento Global (GPS). Los receptores están disponibles comercialmente. En comparación con el UTC , las señales recibidas de estaciones terrestres tiene una precisión del orden de 0.1 a 10 milisegundos, Dependiendo de la estación utilizada. Las señales recibidas de los satélites GPS tienen una precisión de aproximadamente 1 microsegundo Las computadoras con receptores conectados pueden sincronizar sus relojes con estas señales de tiempo.
Sincronizacion de Relojes Fisicos
La sincronización del reloj físico se puede lograr de dos formas: Sincronización del reloj externo e interno. La sincronización de reloj externo es aquella en la que está presente un reloj de referencia externo, que se utiliza como referencia, y los nodos del sistema pueden establecer y ajustar su tiempo en consecuencia. Por otra parte, la sincronización del reloj interno es aquella en la que cada nodo comparte su tiempo con otros nodos y todos los nodos configuran y ajustan sus tiempos en consecuencia.
Hay 2 tipos de algoritmos de sincronización de reloj: centralizados y distribuidos. El centralizado es aquel en el que se utiliza un servidor horario como referencia. El servidor de tiempo único propaga su tiempo a los nodos y todos los nodos ajustan el tiempo en consecuencia. Depende de un servidor de tiempo único, por lo que si ese nodo falla, todo el sistema perderá la sincronización. Ejemplos de centralizados son: algoritmo de Berkeley, servidor de tiempo pasivo, servidor de tiempo activo, etc.
El algoritmo Distribuido es aquel en el que no existe un servidor horario centralizado. En cambio, los nodos ajustan su tiempo usando su hora local y luego, tomando el promedio de las diferencias de tiempo con otros nodos. Los algoritmos distribuidos superan el problema de los algoritmos centralizados como la escalabilidad y la falla de un solo punto. Un ejemplo de algoritmos distribuidos es el NTP (protocolo de tiempo de red).
Algoritmo de Cristian
El algoritmo de Cristian es un algoritmo de sincronización de reloj que los procesos del cliente utilizan para sincronizar la hora con un servidor de hora. Este algoritmo funciona bien con redes de baja latencia donde el tiempo de ida y vuelta es corto en comparación con la precisión, mientras que los sistemas o aplicaciones distribuidos son propensos a la redundancia y no van de la mano con este algoritmo.
Aquí el tiempo de ida y vuelta se refiere al tiempo que transcurre entre el inicio de una solicitud y el final de la respuesta correspondiente. A continuación se muestra una figura que ilustra el funcionamiento del Algoritmo de Cristian:
![]() |
| Algoritmo de Cristian |
Pasos del Algoritmo de Cristian
- El proceso en la máquina cliente envía la solicitud para obtener la hora del reloj (hora en el servidor) al servidor de reloj en la hora T_0.
- El servidor de reloj escucha la solicitud realizada por el proceso del cliente y devuelve la respuesta en forma de hora del servidor de reloj.
- El proceso del cliente obtiene la respuesta del Clock Server en el momento T_1 y calcula el tiempo del reloj del cliente sincronizado utilizando la fórmula que se proporciona a continuación:
[ T_{CLIENTE} = T_ {SERVIDOR} + (T_1 - T_0 ) / 2 ]
- donde T_ {CLIENTE} se refiere a la hora del reloj sincronizado
- T_ {SERVER} se refiere a la hora del reloj devuelta por el servidor,
- T_0 se refiere a la hora a la que el proceso del cliente envió la solicitud,
- T_1 se refiere al momento en que el proceso del cliente recibió la respuesta
Algoritmo de Bekerley
En el algoritmo de Cristian el servidor de tiempo es pasivo. En el caso del algoritmo de Berkeley, el servidor del tiempo está activo y realiza un muestreo de forma periódica a todas las máquinas para preguntarles su tiempo. En base al tiempo de todas las máquinas incluyéndose él mismo, obtiene el promedio y les indica a cada máquina cuanto tiempo deben adelantarse o retrasarse para lograr la sincronización. Al igual que en Cristian, para adelantar o retrasar el reloj hay que hacerlo paulatinamente de acuerdo a las interrupciones que genera el cronómetro.
Procedimiento.
- El servidor de tiempo le envia a cada máquina su tiempo
- Las máquinas cliente le indican el número de segundos que están adelantadas o retrasadas con respecto al tiempo del servidor, si es un número positivo entonces están adelantadas y si es negativo están atrasadas.
- El servidor suma todos estos datos y los divide entre el número de máquinas incluyéndose él mismo.
- El resultado lo suma a su propio tiempo obteniendo T, y calcula el número de segundos que le falta o le sobra a una máquina para llegar a ese tiempo T, y se lo envía a la máquina. Lo mismo hace para cada máquina.
- Las máquinas reciben el resultado y sincronizan su tiempo.
![]() |
| Algoritmo de Bekerley. Tomado de [2] |
Algoritmo NTP
NTP, Network Time Protocol, es un protocolo de internet para sincronizar relojes de sistemas informaticos, a trav[es del enrutamiento de paquetes en redes con latencia variable. Usa UDP como su capa de transporte.
NTP divide a los servidores en estratos: un servidor con un reloj de referencia, tal como un receptor WWV o un reloj atómico, se conoce como servidor de estrato 1 (se dice que el propio reloj opera en el estrato 0). Cuando A contacte a B, sólo ajustará su tiempo si su propio estrato es más alto que el de B. Además, después de la sincronización, el estrato de A será un nivel más alto que el de B. En otras palabras, si B es un servidor de estrato k, entonces A se volverá un servidor de estrato (k + 1) si el nivel de su estrato original ya era mayor que k. Debido a la simetría del NTP, si el nivel del estrato de A era menor que el de B, entonces B se autoajustará con A.
![]() |
| Algoritmo NTP. Tomado de NTP |
Referencias
- Coulouris, George F. Distributed Systems: Concepts and Design. Boston: Addison-Wesley, 2012.
- Tanenbaum, Andrew S., and Maarten van Steen. Distributed Systems: Principles and Paradigms. Upper Saddle River, NJ: Pearson Prentice Hall, 2007
































