Por un segundo

La madrugada del 1 de julio de 2012 recuerdo que se convirtió en una pesadilla para algunos administradores de sistemas. Varios servidores comenzaron simultáneamente a fallar y produjeron problemas, cuando no dejaron inoperativas, las webs de Amadeus, Reddit, Linkedln, Foursquare, Mozilla, Stumbleupon, Yelp o Gawker. También resultaron afectados los vuelos de la compañía australiana Qantas, y en menor medida de Virgin Australia y Cathay Pacific. La causa no era evidente: posiblemente usted, lector, tampoco sabía que el último minuto del mes de junio previo no tuvo 60 segundos, sino 61. Es lo que se conoce como segundo intercalar, y permite reajustar los relojes con el tiempo astronómico.
En Wired explicaron el acontecimiento con suficiente detalle; yo intentaré resumir lo mejor que pueda. Los servidores afectados utilizan el protocolo NTP (Network Time Protocol) para sincronizar su tiempo, y en algunos casos sus aplicaciones, principalmente el subsistema hrtimer del núcleo de Linux, no manejaron de forma apropiada la alteración. En palabras de Linus Torvalds, «casi siempre que tenemos un segundo intercalar, encontramos algo. Es bastante frustrante, porque es el caso clásico de código que básicamente nunca se ejecuta, y por tanto no se prueba por los usuarios bajo condiciones normales». En realidad hrtimer había sido corregido en marzo por el programador John Stultz, pero algunas distribuciones no habían incluido la modificación. Este subsistema se utiliza entre otras cosas para establecer una alarma cuando ciertos procesos llevan demasiado tiempo dormidos, la cual permite al sistema operativo actuar en consecuencia. Pues bien, al adelantar los relojes de estos servidores un segundo se produjeron un buen número de estas alarmas, lo que hizo despertar a todos estos procesos a la vez y sobrecargar las CPU. Para colmo de males, el día anterior la nube de Amazon había tenido una interrupción masiva que hizo caer algunos de los servicios de Internet, razón por la cual muchos atribuyeron la sobrecarga a la ralentización de alguna aplicación dependiente de éstos.
El caso de Reddit fue diferente. Los servidores ejecutan la base de datos Cassandra, programada en Java, que daba fallos a la hora de pausar los procesos, por lo que éstos se quedaban ejecutando un bucle indefinido y consumiendo los recursos de las CPU. Se solucionó reiniciando los servidores, razón por la cual Reddit estuvo inoperativo algo más de media hora. Problemas similares se atribuyen a Hadoop o Tomcat, usados por Mozilla y Gawker. Otros servidores, al parecer, empezaron a dar problemas el viernes, con el mismo anuncio NTP de que se añadiría el segundo intercalar.
Evitar estos problemas no es tarea sencilla, máxime teniendo en cuenta que en estas escalas de espacio y tiempo los sistemas informáticos son algo orgánico, continuamente cambiante. Estoy con Wired en que, aunque no se pueda extender, la solución que le ha dado Google es muy ingeniosa: en vez de creer a pies juntillas las indicaciones de tiempo de NTP, han introducido una modificación para aplicar las alteraciones de reloj de forma paulatina, sumando milisegundos uno a uno en periodos relativamente largos de tiempo.

Facebooktwitterlinkedin

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.