Diferencia entre revisiones de «Algoritmo de Cristian»

Contenido eliminado Contenido añadido
m Revertidos los cambios de 189.210.91.130 (disc.) a la última edición de KLBot2
Sin resumen de edición
Línea 1:
El '''algoritmo de Cristian''' (1989) es un método, dentro de la [[computación distribuida]], para la sincronización de relojes. Cristian describe el método como probabilístico debido a que se consigue sincronización solo si el tiempo de respuesta es suficientemente corto comparado con la precisión requerida.<ref>G. Colouris, J. Dollimore, T. Kindberg and G. Blair. Distributed Systems: Concepts and Design (5th Ed). Addison-Wesley, 2011.</ref> Consiste en un servidor conectado a una fuente de [[UTC]] y unos clientes que se sincronizan con dicho servidor.
El '''algoritmo de Cristian'''<ref>{{Obra citada
| last=Cristian
| first=F.
| title=Probabilistic clock synchronization
| journal=Distributed Computing
| volume=3
| issue=3
| year=1989
| pages=146--158
| publisher=Springer
}}</ref> es un método para la [[sincronización de relojes]] que se puede usar en muchos campos de la [[computación distribuida]]. El algoritmo es probabilístico, es decir sólo puede sincronizar si el [[RTT]] es bajo en comparación con la precisión deseada. También tiene problemas en funciones donde se usa un solo [[servidor]]. Tampoco es adecuado para numerosas aplicaciones distribuidas donde la [[redundancia]] sería importante.
 
== Introducción ==
 
La [[sincronización de relojes en un sistema distribuido]] consiste en garantizar que los procesos se ejecuten de forma cronológica y a la misma vez respetar el orden de los eventos dentro del sistema.
Existen dos tipos de sincronización de relojes físicos:
 
*Sincronización externa: consiste en sincronizar los relojes de los procesos ''C<sub>i</sub>'' con una fuente de tiempo externa fiable.
== Notas ==
<references/>
 
::''|S(t) – C<sub>i</sub>(t)| < D'' ; siendo ''D'' un límite mayor que cero y ''S'' una fuente de tiempo UTC.
[[Categoría:Computación distribuida]]
 
*Sincronización interna: si los relojes ''C<sub>i</sub>'' están sincronizados entre ellos con un conocido grado de precisión y no necesariamente sincronizados con una fuente externa de tiempo.
 
::''|C<sub>i</sub>(t) < C<sub>j</sub>(t) | < D'' ; siendo ''D'' un límite mayor que cero.
 
== Sincronización interna en un sistema síncrono ==
 
En un sistema síncrono son conocidos:
 
*Los límites de deriva de los relojes.
*El máximo retardo de transmisión de mensajes.
*Tiempo para ejecutar cada paso de un proceso.
 
El proceso seguido para la sincronización entre dos procesos es el siguiente:
 
:#Un proceso envía el tiempo ''t'' de su reloj local a otro proceso en un mensaje ''m''.
:#El proceso receptor puede actualizar su reloj con el tiempo ''t + T<sub>TRANS</sub>'' al recibir el mensaje, donde ''T<sub>TRANS</sub>'' es el tiempo empleado en transmitir el mensaje ''m'' entre ellos.
 
''T<sub>TRANS</sub>'' es desconocido y no se puede determinar pues depende del tráfico de red .Pese a ello se puede establecer un mínimo tiempo de transmisión, que se obtiene cuando no hay tráfico en la red ni otros procesos, y un máximo estimado.
 
La incertidumbre en el tiempo de transmisión del mensaje se define como ''u =(max – min)''.
:*Si el receptor coloca su reloj a ''t + min'' el sesgo del reloj puede ser como mucho ''u''.
:*Si el receptor coloca su reloj a ''t + max'' el sesgo del reloj puede ser como mucho ''u''.
:*Si el receptor coloca su reloj a ''t + (max + min)/2'' el sesgo es como mucho ''u/2''.
 
En general, para un sistema síncrono el error óptimo cuando se sincronizan N relojes es ''u( 1-1/N)''.
La mayoría de los sistemas distribuidos son asíncronos y no tienen definido un límite máximo para la transmisión de mensajes por lo tanto:
 
::''T<sub>TRANS</sub> = min + x'' ; el valor de ''x'' es mayor o igual que cero y depende de cada caso en particular.
 
== Funcionamiento del algoritmo ==
 
#Un proceso ''p'' hace una petición de tiempo al servidor en un mensaje ''m<sub>r</sub>''.
#El servidor responde con un mensaje ''m<sub>t</sub>'' en el que incluye su tiempo ''T<sub>UTC</sub>''.
#El proceso que recibe el mensaje ''m<sub>t</sub>'' actualiza su reloj con el tiempo ''T<sub>UTC</sub>'', pero hay que considerar el error cometido pues se ha requerido un tiempo para la transmisión del mensaje desde el servidor.
Se mide el tiempo que se tarda en recibir la respuesta desde que de envía el mensaje de petición, ''T<sub>VIAJE</sub>''.
El tiempo estimado de propagación, en ausencia de otra información, será ''T<sub>VIAJE</sub> /2'' por lo que el cliente sincroniza su reloj a ''T<sub>UTC</sub> + T<sub>VIAJE</sub>/2''.
Esta estimación puede mejorarse si se conoce el tiempo mínimo de propagación del mensaje:
 
:*El tiempo mínimo en el que el servidor escribió el mensaje es ''min''.
:*El tiempo máximo en el que el servidor escribió el mensaje es ''T<sub>VIAJE</sub> – min''.
 
Por lo tanto el tiempo en el que el mensaje del servidor es recibido se sitúa en el rango ''[C<sub>UTC</sub> + min, C<sub>UTC</sub>+ T<sub>VIAJE</sub> –min ]'' cuya anchura es ''T<sub>VIAJE</sub> – 2min'' así que la precisión es ''± T<sub>VIAJE</sub>/2 – min''.
 
 
[[File:Algoritmo cristian.jpg|centre|Imagen del proceso del algoritmo]]
 
== Inconvenientes ==
 
#El problema que se presenta es la posibilidad de fallo debido a la existencia de un único servidor. Cristian sugiere múltiples servidores de tiempo sincronizados que suministren el tiempo. El cliente envía un mensaje de petición a todos los servidores y toma la primera respuesta recibida.
#El algoritmo no contempla problemas de malfuncionamiento o fraude por parte del servidor.
 
 
== Referencias ==
{{reflist}}
 
*G. Colouris, J. Dollimore, T. Kindberg and G. Blair. Distributed Systems: Concepts and Design (5th Ed). Addison-Wesley, 2011
*Cristian, F. (1989), «Probabilistic clock synchronization», Distributed Computing (Springer) 3 (3): 146--158
 
 
 
[[Categoría:Sincronización de relojes lógicos]]