{"id":1186,"date":"2025-04-14T18:04:33","date_gmt":"2025-04-14T18:04:33","guid":{"rendered":"https:\/\/cloudlab.urv.cat\/catedracloud\/?p=1186"},"modified":"2025-04-14T18:04:41","modified_gmt":"2025-04-14T18:04:41","slug":"cambiaste-un-rolex-por-un-lamport","status":"publish","type":"post","link":"https:\/\/cloudlab.urv.cat\/catedracloud\/2025\/04\/14\/cambiaste-un-rolex-por-un-lamport\/","title":{"rendered":"Cambiaste un Rolex por un Lamport"},"content":{"rendered":"\n<p>Anotar el momento en el que pasa cada cosa dentro de un ordenador es relativamente f\u00e1cil. Por un lado, todo ordenador incorpora un contador interno que calcula el paso de los segundos monitorizando la oscilaci\u00f3n de cierto material (t\u00edpicamente cristal de cuarzo). Por otro lado, y para resolver los peque\u00f1os desajustes del reloj interno, la hora local se sincroniza peri\u00f3dicamente con un servidor externo de referencia  (mediante <a href=\"https:\/\/www.techtarget.com\/searchnetworking\/definition\/Network-Time-Protocol\" data-type=\"link\" data-id=\"https:\/\/www.techtarget.com\/searchnetworking\/definition\/Network-Time-Protocol\">NTP<\/a>).<\/p>\n\n\n\n<p><strong>No podemos siempre afirmar que la hora a la que se registra un<\/strong> <strong>evento es la real<\/strong>. Pongamos que un ordenador sincroniza la hora por NTP cada 3 segundos, y que su oscilador tiene un error de dos milisegundos por segundo. Un evento que ocurra 2 segundos m\u00e1s tarde de la sincronizaci\u00f3n podr\u00eda estar anotado con un tiempo incorrecto por hasta 4 ms.<\/p>\n\n\n\n<p>Esta circunstancia no es un problema si todo pasa en un \u00fanico ordenador. Si todos los eventos toman como referencia el mismo reloj, podemos identificar f\u00e1cilmente cu\u00e1l ha pasado antes y cu\u00e1l ha pasado despu\u00e9s, aunque la hora exacta sea algo incorrecta. Sin embargo, todo se vuelve m\u00e1s complicado cuando utilizamos sistemas distribuidos.<\/p>\n\n\n\n<p>Sin embardo, en sistemas distribuidos es inevitable que cada m\u00e1quina tenga su propio reloj interno, con sus propios errores de oscilaci\u00f3n e intervalos de sincronizaci\u00f3n. Por lo tanto, las horas a la que se registra cada evento depender\u00e1n del componente que los genera. En la pr\u00e1ctica, un evento que ocurre immediatamente despu\u00e9s de otro podr\u00eda tener una anotaci\u00f3n temporal menor, como ejemplifica el diagrama siguiente. A pesar de que el evento enviado por C es posterior al enviado por A, sus anotaciones temporales siguen el orden inverso.<\/p>\n\n\n\n<div class=\"wp-block-uagb-image uagb-block-278dd7f1 wp-block-uagb-image--layout-default wp-block-uagb-image--effect-static wp-block-uagb-image--align-none\"><figure class=\"wp-block-uagb-image__figure\"><img decoding=\"async\" src=\"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/04\/lamport.png\" alt=\"\" class=\"uag-image-1188\" width=\"367\" height=\"290\" title=\"lamport\" loading=\"lazy\" role=\"img\" \/><\/figure><\/div>\n\n\n\n<p>Si queremos resolver conflictos en un sistema, volver hasta un estado anterior o sincronizar operaciones, <strong>es esencial saber qu\u00e9 evento ha ocurrido antes y cu\u00e1l despu\u00e9s<\/strong>. Los relojes de Lamport resuelven este problema en sistemas distribuidos, estableciendo un orden entre operaciones sobre m\u00e1quinas con diferente hora interna.<\/p>\n\n\n\n<p>Un reloj de Lamport <strong>no es ni una hora exacta ni un reloj compartido por todos los componentes<\/strong>. Es un <strong>contador num\u00e9rico<\/strong> mantenido por cada componente independiente, que garantiza el orden global de los eventos desde la perspectiva local de cada propia m\u00e1quina. El algoritmo para actualizar el contador sigue reglas sencillas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un proceso incrementa su propio contador antes de cada evento.<\/li>\n\n\n\n<li>Cuando un proceso env\u00eda un mensaje, incluye el valor de su contador en el mensaje.<\/li>\n\n\n\n<li>Al recibir un mensaje, el proceso receptor actualiza su contador tomando el valor m\u00e1s alto entre su propio contador y el que incluye el propio mensaje.<\/li>\n<\/ul>\n\n\n\n<p>De esta manera, cualquier evento B que ocurra m\u00e1s tarde que un evento A ser\u00e1 anotado con una anotaci\u00f3n temporal posterior (correcta o incorrecta, no nos importa para establecer un orden), sea cual sea la m\u00e1quina que lo ejecuta. Al final resultar\u00e1 que Lamport tambi\u00e9n fabrica buenos relojes, aunque no claven la hora.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Anotar el momento en el que pasa cada cosa dentro de un ordenador es relativamente f\u00e1cil. Por un lado, todo ordenador incorpora un contador interno que calcula el paso de los segundos monitorizando la oscilaci\u00f3n de cierto material (t\u00edpicamente cristal de cuarzo). Por otro lado, y para resolver los peque\u00f1os desajustes del reloj interno, la [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":1190,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","_swt_meta_header_display":false,"_swt_meta_footer_display":false,"_swt_meta_site_title_display":false,"_swt_meta_sticky_header":false,"_swt_meta_transparent_header":false,"footnotes":""},"categories":[15,53,52],"tags":[],"class_list":["post-1186","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-divulgacion","category-fundamentos","category-historia-y-fundamentos"],"jetpack_featured_media_url":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/04\/lamport_rolex.png","uagb_featured_image_src":{"full":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/04\/lamport_rolex.png",3840,2160,false],"thumbnail":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/04\/lamport_rolex-150x150.png",150,150,true],"medium":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/04\/lamport_rolex-300x169.png",300,169,true],"medium_large":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/04\/lamport_rolex-768x432.png",768,432,true],"large":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/04\/lamport_rolex-1024x576.png",1024,576,true],"1536x1536":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/04\/lamport_rolex-1536x864.png",1536,864,true],"2048x2048":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/04\/lamport_rolex-2048x1152.png",2048,1152,true]},"uagb_author_info":{"display_name":"Germ\u00e1n Telmo Eizaguirre Su\u00e1rez","author_link":"https:\/\/cloudlab.urv.cat\/catedracloud\/author\/geizaguirre\/"},"uagb_comment_info":6,"uagb_excerpt":"Anotar el momento en el que pasa cada cosa dentro de un ordenador es relativamente f\u00e1cil. Por un lado, todo ordenador incorpora un contador interno que calcula el paso de los segundos monitorizando la oscilaci\u00f3n de cierto material (t\u00edpicamente cristal de cuarzo). Por otro lado, y para resolver los peque\u00f1os desajustes del reloj interno, la&hellip;","_links":{"self":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/1186","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/comments?post=1186"}],"version-history":[{"count":3,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/1186\/revisions"}],"predecessor-version":[{"id":1191,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/1186\/revisions\/1191"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/media\/1190"}],"wp:attachment":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/media?parent=1186"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/categories?post=1186"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/tags?post=1186"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}