» »

Kako Google upošteva prestopne sekunde na svojih strežnikih

Kako Google upošteva prestopne sekunde na svojih strežnikih

vir: Google
Google - O prestopnih sekundah smo že nekajkrat pisali, običajno tedaj, ko so se pojavile. Gre za dodatne sekunde, ki se dodajo (ali teoretično tudi odvzamejo) ob koncu junija ali decembra ob polnoči (vsakokrat po času UTC), ker vrtenje Zemlje ni povsem stalno. To se pri nas pokaže tako, da času 0:59.59 sledi izredna sekunda 0:59.60, šele nato pa je ura 1:00.00. V vsakdanjem življenju to težav ne povzroča, računalniki pa se tudi prek protokola NTP sinhronizirajo sami. Povzroča pa to probleme Googlu.

Googlovi inženirji so leta 2005 ugotovili, da za občutljivo infrastrukturo podatkovnih strežnikov prestopne sekunde (ko se de facto ena sekunda ponovi oziroma ura skoči nazaj) niso najbolj zaželene. Izpadov takrat sicer ni bilo, je pa nekaj manjših sistemov začasno nehalo delovati. Zato so v Googlu razmislili, kako prestopne sekunde prelisičiti.

Uporabili so zanimiv trik. Ure na njihovih računalnikih se sinhronizirajo na internih NTP-strežnikih, ki so jih prilagodili tako, da malo lažejo. Kadar se bo prestopna sekunda zgodila (IERS to objavi vnaprej), Google v NTP-strežnike doda dinamični popravek, tako da se ura vsakokrat sinhronizira na nekaj milisekund manj (ali več). Tako v vmesnem obdobju ravno nadoknadijo prestopno sekundo in ko se ta zgodi, so Googlove ure že točne, ne da bi bilo treba kakšno sekundo dodati ali spustiti.

9 komentarjev

medobear ::

Idejo so najbrz dobili iz filma Entrapment.

Zgodovina sprememb…

  • spremenil: medobear ()

kipling ::

A lahko kdo razloži uporabljeno formulo :). Se pravi, če je w (window) npr: 43200 sekund (12 ur) je potem lie(1)= 1.3E-09 v primeru 1 sekunde. Se pravi bi se moralo 1.3E-09 sekunde dodati vsaki pretečeni sekundi, da bi v 12 urah dobili dodatno sekundo? Samo čez cel window 43200 sekund mi to niti približno ne znese eno sekundo...

BigWhale ::

V 43200 sekundah morjo not spravit 1000 milisekund. Sej ni tko tezko no. :) Vsako 432. sekundo driftajo za eno mili sekundo, ce sem prav zracunal?

MrStein ::

Ne. ;)
Teštiram če delaž - umlaut dela: ä ?

MrStein ::

Njihova formula pa ni linearna, kot se lepo vidi:
lie(t) = (1.0 - cos(pi * t / w)) / 2.0

Torej čas, ki ga vrne NTP server je pravi_čas + laž, torej pravi_čas+lie(t),
kjer je t čas od začetka popravka , w pa je trajanje popravka.

Oblika grafa je taka:
 w=3

w=3



Torej popravek počasi začne naraščati od 0 , potem narašča hitreje, na koncu pa se umirjeno približa vrednosti 1.


PS: Link do slike, če zgoraj ne deluje prav: http://imageshack.us/photo/my-images/97...
Teštiram če delaž - umlaut dela: ä ?

Zgodovina sprememb…

  • spremenil: MrStein ()

BigWhale ::

MrStein je izjavil:

Ne. ;)


Bom su drugic prebrat se izvorno novico. :>

kipling ::

@ MrStein

Hvala, lepo razloženo :).

fiction ::

Ob tem se mi poraja vprašanje, kakšna bi bila praktična razlika, če bi bila funckija lie(t) linearna?

BlueRunner ::

Praktična razlika bi bila, da ali prehod prehod ne bi bil dovolj gladek, ali pa bi prehod trajal predolgo.

Kar moraš upoštevati, je to, da je tvoja "funkcija lie(t)" dejansko rezultat neke druge funkcije, ki pa je linearna. Samo ne po času. :D


Sicer pa glede "dovolj gladkega prehoda"...

NTP odjemalec namreč ne "preskakuje" na korkoli dobi od NTP strežnikov, temveč počasi limitira proti pravilni vrednosti časa. Sočasno pa računa še koliko lokalna ura na strežniku prehiteva ali zaostaja (drift) in nato samostojno popravlja tudi lokalno sistemsko uro. Cilj je, da drift ujame natančno prehitevanje/zaostajanje ure, tako da popravki časa praktično več niso potrebni.

S poznavanjem delovanja NTP odjemalcev v gruči in neko predpisano toleranco odstopanja znotraj gruče, lahko dokaj natančno izračunaš kolikšna je največja delta za katero lahko časovni interval pospešiš ali upočasniš. Če recimo izračunaš, da lahko 1s' skrajšaš za 0,1% vsakih 5s' (ura začne prehitevati), ne da bi porušl sinhronizacijo, potem lahko to vržeš v enačbo in izračunaš kolikšen je najkrajši časovni interval, v katerem lahko čas v sistemu dovolj pospešiš in nato še upočasniš do ponovnega ujemanja s pravilnim časom.

Rezultat je, da se na začetku na času pridobivaš počasi, nato pa vedno hitreje (namesto enakomernega pospeška imaš enakomerno naraščajoči/pojemajoči pospešek).

Če bi naredil samo eno skrajšanje intervala (npr. 1000ms bi pretekel v 995ms), potem bi celoten proces trajal mnogo dlje. Vendar pa čisto po nepotrebnem, ker bi lahko takoj potem, ko se ure odjemalcev stabilizirajo, narediš nov prehod. Bodisi v plus, bodisi v minus. Torej je graf rezultat tega, da narediš prestopno sekundo v najkrajšem možnem času znoraj predpisanih toleranc. No... pa verjetno so si vzeli še kaj rezerve za vsak primer.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Kako Google upošteva prestopne sekunde na svojih strežnikih

Oddelek: Novice / Omrežja / internet
94658 (2960) BlueRunner
»

Tudi letos sekundo daljša najdaljša noč

Oddelek: Novice / Znanost in tehnologija
175167 (4253) Matthai
»

Sekundo daljše silvestrovanje

Oddelek: Novice / Znanost in tehnologija
334196 (2897) christooss

Več podobnih tem