Skudsekund fik tiden til at gå baglæns på Cloudflares DNS-servere

Cloudflares kode til at finde den bedste DNS-server kunne ikke håndtere en negativ tidsforskel, der opstod i forbindelse med skudsekundet nytårsaften.

Det er normalt en rimelig antagelse, at det altid vil tage mindst nul millisekunder at få et svar fra en server. Men hvad sker der, når der lige pludselig er et ekstra sekund?

Afviklingen af det seneste skudsekund nytårsaften gav problemer hos Content Delivery Network-udbyderen Cloudflare på grund af en funktion til at finde frem til den hurtigste DNS-server på netværket.

Problemet ramte mindre end én procent af http-trafikken hos Cloudflare på det pågældende tidspunkt, men årsagen er principielt interessant, lyder det fra Cloudflares teknikere i et blogindlæg.

Læs også: Google vil sprede skudsekund over 20 timer nytårsaften

Skudsekunder har før givet problemer. De er korrektioner for variationer i Jordens rotation, som er vanskeligere at forudsige, og derfor er de uregelmæssige i modsætning til skudår. Et særligt udvalg beslutter, om det er nødvendigt at forlænge eller forkorte året med et sekund for at kompensere for ændringer i rotationen.

I dag har mange tidsservere indbyggede metoder til at håndtere skudsekunder, og tidsafhængige applikationer er nødt til at klare tidsændringerne korrekt. For den pågældende kode hos Cloudflare var der imidlertid ikke taget højde for skudsekundet.

Problemet var i programmet RRDNS, som blandt andet sørger for at fordele en DNS-forespørgsel til den DNS-server, der kan give det hurtigste svar.

Programmet er skrevet i Go og brugte den indbyggede time.Now()-funktion. Den bruger imidlertid ikke en tidskilde, der sikrer, at tiden altid løber i én retning. Det giver problemer, når skudsekundet optræder, fordi forskellen mellem to tidsmålinger kan blive negativ.

Læs også: Skudsekund gør nedtælling til nytåret ét sekund længere

De negative målinger blev sendt videre som argument til en random-funktion i Go, og det udløste en fejl.

Cloudflare løste problemet ved at rette ét enkelt tegn i koden. Programmet indeholdt allerede et tjek for, om tidsforskellen var lig nul. Det blev rettet til et tjek for, om tidsforskellen var mindre end eller lig nul.

Ifølge Cloudflare opstod problemet ved midnat (UTC), og i løbet af to timer var selskabet i færd med udrulningen af den opdaterede software, og problemet var helt løst klokken 6:45 nytårsmorgen.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (0)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Log ind eller Opret konto for at kommentere