Как една допълнителна секунда обърка интернет

Когато в събота през нощта бъгът с високосната секунда ударя популярната страница Reddit, Джейсън Харви не осъзнава какво точно се случва. Той предполага, че инцидентът е свързан с общото забавяне на интернет, причинено от срива на облачните услуги на Amazon, който блокира за известно време някои от най-популярните интернет страници 24 часа по-рано, пише изданието Wired.
"Изглеждаше така, сякаш мрежата просто работи наистина бавно, казва Харви, един от системните администратори на Reddit. След като Amazon падна, най-логичното нещо беше да има мрежов проблем."
След около час и половина обаче Харви и екипът му проследяват проблема до група от техните собствени машини, работещи под Linux. Въпросните сървъри спират почти напълно, след като не успяват да приемат "високосната секунда", която бе добавена в световните атомни часовници в събота през нощта.
В зависимост от скоростта на въртене на Земята към атомните часовници периодично се добавя една допълнителна секунда, за да се поддържат в синхрон с въртенето на планетата. Това предотвратява изместването на залезите към сутринта, но може да създаде проблеми за компютърните системи, които не са подготвени да включат в изчисленията си допълнителната секунда.

В случая на Reddit проблемът може да бъде проследен до бъг в ядрото на операционната система Linux. Подпрограма, наречена hrtimer, се обърква заради промяната на времето и внезапно предизвиква хиперактивност на сървърите, което блокира процесорите им.
Reddit обаче не е единственият случай на блокирала страница при подобни обстоятелства. През януари 2009 г. при подобно добавяне на секунда операционната система на Sun Microsystems, наречена Solaris, също започва да се държи странно. Същото се случва и с един от софтуерните пакети на Oracle.
"Почти всеки път когато добавяме високосна секунда, откриваме нещо", коментира Линус Торвалдс, създателят на Linux, пред авторитетното технологично издание Wired. "Много е досадно, защото това е класически случай на код, който на практика никога не е използван и следователно не е тестван от потребителите в реални условия."
Въпреки че бъгът в програмата hrtimer е бил поправен през март от специалиста в сферата на операционната система Linux Джон Щулц, не всички версии на Linux са били обновени с "кръпката".
Същността на проблема
Какво всъщност се случва с машините на Reddit? Сложно е. Дори Линус Торвалдс казва, че за да се разбере наистина какво се е случило, трябва да се говори с Шулц. След няколко разговора със запознати лица екипът на Wired се опитва да сглоби историята на проблема.
Hrtimer е подпрограма, използвана, когато някоя програма минава в "спящ" режим, изчаквайки операционната система да изпълни някаква друга задача. В някои случаи тя слага аларма за тези "спящи" програми, които трябва да се задействат, ако операционната система се забави прекалено много с другата работа.
Когато е била въведена допълнителната секунда, hrtimer изведнъж е започнал да изпреварва ядрото на операционната система и да задейства алармите, събуждайки десетки спящи приложения наведнъж и претоварвайки по този начин процесорите на машините.
В случая на Reddit става дума за нещо малко по-различно. Сървърите на услугата използват базата данни с отворен код Cassandra, която е написана на програмния език Java и работи под Linux. Според Харви Cassandra не е успяла да спре процесите на Java и те са започнали безкрайно да се подновяват, изяждайки процесорната мощ на сървърите, използвани от Reddit. Проблемът в крайна сметка е решен с рестартиране на всички машини.
И така до следващата секунда
Кога ще бъде добавена следващата допълнителна секунда зависи от въртенето на Земята. Тя може да се забави или да се забърза, съществуват зависимости, свързани с приливите и отливите, както и с времето и движението на течните метали в ядрото на планетата.
"Когато си играеш с времето, има доста голям шанс нещо да се обърка", смята Торвалдс. Разработчиците на софтуер може да правят тестове за тези проблеми предварително, но е трудно да се предвиди какво ще се случи в реална ситуация.
"От 1995 до 2005 г. няма добавяне на допълнителни секунди. През това време се създават основите на облачните услуги и мултипроцесорните решения", казва програмистът Стив Алън от Lick Observatory, посочвайки, че създателите на тези продукти не са обмисляли проблема за допълнителната секунда. Оттогава насам обаче допълнително време е добавяно през 2005, 2008 и сега през 2012 г.
Някои хора призовават повече да не се добавя високосна секунда с цел да бъдат избегнати подобни проблеми. Дотогава обаче специалистите предлагат различни решения на проблема. От Opera разглеждат възможността за спиране на мрежовия времеви протокол (NTP) на Linux за секунда, вместо да бъде пипан системният часовник.
"На практика, ако излъжете NTP, това няма да е неочаквана стъпка назад, но въпреки това ще добави допълнителна секунда", казва системният администратор Марко Маронджиу. Според него това обаче не е оптималното решение. Tой дава за пример опита на Google – те променят мрежовия протокол по такъв начин, че вместо да прибави наведнъж цяла секунда в изчисленията си, той добавя милисекунди за много дълъг период от време.
Това е умно решение, коментират от Wired, но не е панацея. Защото, когато дойде следващата допълнителна секунда, някъде нещо отново ще се бъгне...