Вы думаете, что живете в XXI веке, а ваш умный тостер уверен, что на дворе 1970-й. Рассинхрон часов — это не просто опоздание на встречу. Это причина, по которой падают сайты, отключаются электростанции, а навигатор показывает, что вы едете по лесу. Во второй части дилогии о Времени разбираемся, как мы пытаемся заставить часы не врать, если врёт сама Вселенная.
Расшифровка...
Который сейчас час? Казалось бы, простой вопрос. Вы смотрите на смартфон, на ноутбук, на микроволновку. Везде цифры примерно одинаковые. И ключевое слово — «примерно».
Для человека разница в пару секунд или даже минут — это ерунда. Мы округляем. Мы говорим «полдень», даже если на часах 11:58 или 12:03. Но для мира машин, где за одну секунду процессор совершает миллиарды операций, понятие «примерно» недопустимо. Если часы на сервере банка и на вашем телефоне разойдутся на пару минут, ваша транзакция может не пройти. Если рассинхрон случится в энергосети, это может привести к аварии.
Меня зовут Иннокентий Солнцев, это подкаст «До нас дошло». Сегодня мы поговорим о том, как человечество пытается решить нерешаемую задачу: заставить все часы в мире тикать синхронно.
Чтобы заставить часы тикать секунда в секунду, нужно сначала договориться: а что такое, собственно, «одна секунда»?
Раньше всё было просто и понятно. Секунда — это определенная часть средних солнечных суток. Земля обернулась вокруг своей оси — прошли сутки. Это астрономическое время, понятное и естественное. С изобретением механических часов стало возможным измерить с приемлемой точностью небольшие периоды, и тогда один час определялся как 1/24 суток, одна минута - как 1/60 часа, и одна секунда - как 1/60 доля минуты. В одних сутках по определению получалось 86400 секунд.
Но в XX веке физики обнаружили неприятный факт: Земля — плохой хронометр. Она вращается нестабильно. Ветры, океанские приливы, таяние ледников и землетрясения постоянно чуть-чуть меняют скорость вращения планеты. Плюс в долгосрочной перспективе Земля замедляется, хотя иногда может кратковременно и ускоряться.
Опираться на вращение Земли — это как измерять расстояние резинкой от трусов. Вроде бы мера есть, но она всё время разная. Металлической линейкой это делать куда сподручнее.
Поэтому в 1967 году учёные сказали: «Хватит». Они отвязали секунду от астрономии и привязали её к квантовой физике. Новая секунда — это 9 192 631 770 колебаний атома цезия-133. Атомы одинаковы во всей Вселенной. Атом цезия в вашей лаборатории и атом цезия в далекой галактике будут вибрировать с абсолютно одинаковой частотой. На них не влияют ни погода, ни политика, ни настроение императора. Это фундаментальная константа природы.
Так появилось Международное атомное время (TAI). Это идеальная, равномерная шкала. Атомные часы не спешат и не отстают. Они тикают с пугающей точностью.
Но вот беда: наши компьютеры и телефоны не носят в себе атомные часы. Это дорого и сложно. Внутри бытовой техники живет гораздо более дешевый компонент - крошечная пластинка из кристалла кварца. Если подать на этот кристалл электричество, он начинает механически дрожать, вибрировать. Причем с очень стабильной частотой, которую на заводе можно с хорошей точностью откалибровать. Компьютер просто считает эти вибрации: насчитал 32 тысячи — ага, прошла секунда.
Но «стабильная частота» — это громко сказано. Кристалл — это физическое тело. При нагреве он чуть-чуть расширяется, при охлаждении — сжимается. Изменяется размер — изменяется и частота вибрации, как меняется звук струны, если её натянуть.
Нагрелся ваш процессор от тяжелой задачи — часы побежали чуть быстрее. Вынесли телефон на мороз — часы замедлились.
Это явление называется Clock Drift — дрейф часов. Нагрелся ноутбук — время побежало быстрее. Остыл — замедлилось. Без сверки с эталоном обычные часы могут «уплыть» на несколько секунд в сутки.
И тут возникает главный конфликт современной хронологии. У нас есть идеальные атомные часы. И есть реальная планета Земля, которая вращается как попало. И они неизбежно расходятся.
Итак, у нас есть две шкалы.
Одна — Атомная (TAI). Она идет идеально ровно, как по линейке.
Вторая — Всемирное время (UT1). Это, по сути, «время Земли». Оно определяется тем, как наша планета реально поворачивается вокруг своей оси. И поскольку Земля в среднем замедляется, секунды в шкале UT1 становятся чуть длиннее и растянутее.
Разница между ними накапливается. Атомные часы «убегают» вперед, а солнечный полдень наступает всё позже. Если ничего не делать, через пару тысяч лет полдень по атомной шкале наступит в час дня.
Чтобы этого не допустить, в 1972 году придумали компромисс — время UTC (Всемирное координированное время). Оно тикает по атомным секундам, но раз в пару лет ученые искусственно «подкручивают» его, чтобы оно не расходилось с Землей больше чем на секунду.
Так появилась високосная секунда. В назначаемый Международной службой вращения Земли день (обычно 30 июня или 31 декабря) после 23:59:59 наступает не 00:00:00, а уникальное время — 23:59:60.
Для человеков эта лишняя секунда незаметна. Для компьютеров это катастрофа.
Большинство программ не знают, что в минуте может быть 61 секунда. Когда сервер видит время `23:59:60`, он паникует.
Кто-то зависает. Кто-то начинает бешено потреблять процессор. Кто-то просто перезагружается.
В 2012 году добавление секунды «уронило» крупные сайты: Reddit, LinkedIn, Yelp. В Австралии из-за этого бага встала система регистрации авиарейсов Qantas.
Инженеры Linux и Java годами латали дыры, чтобы научить код понимать эту «невозможную» секунду.
Чтобы избежать хаоса, техногиганты вроде Google и Amazon придумали хитрость — Leap Smearing («размазывание»). Вместо того чтобы добавлять секунду рывком, они в течение суток заставляют свои часы идти на 0.001% медленнее. Они намеренно «врут» о времени, растягивая его, чтобы к полуночи незаметно накопить эту лишнюю секунду без скачков и сбоев.
Это работает. Но это создает новую проблему: в течение дня часы Google показывают не совсем то же время, что часы остального мира.
Добавление високосной секунды решает проблему замедления вращения нашей планеты, но иногда она не замедляется, а ускоряется, и тогда приходится, наоборот, убирать лишнюю секунду. Из-за повышенного таяния ледников нам, вероятно, придется это сделать довольно скоро, не позже 2029 года.
Этот бардак с секундами вызывает столько проблем, что в 2022 году на Генеральной конференции по мерам и весам было принято решение к 2035 году отказаться от добавления високосных секунд. То есть: «К черту астрономию, пусть время расходится, зато серверы падать не будут».
Допустим, мы определились с эталоном. Где-то в лаборатории стоят атомные часы, которые показывают правильное UTC. Но как передать это время на ваш ноутбук?
Казалось бы, просто отправь пакет с текущим временем. Но пока этот пакет летит по проводам и оптоволокну, время уже уйдет вперед. Это может занять 1 миллисекунду, а может и 200. Если интернет «лагает», задержка будет каждый раз разной.
Для этого в 1985 году придумали протокол NTP (Network Time Protocol). Это один из старейших протоколов интернета, который работает до сих пор.
NTP работает хитро. Ваш компьютер отправляет запрос серверу времени и засекает, когда отправил. Сервер получает запрос, ставит свою метку времени и отправляет ответ.
Получив ответ, ваш компьютер знает четыре цифры: когда он спросил, когда сервер получил, когда сервер ответил и когда ответ пришел.
Решив простую систему уравнений, компьютер может вычислить, сколько времени пакет летел туда-обратно, вычесть эту задержку и узнать реальное время с точностью до десятков миллисекунд. Конечно, при условии, что путь «туда» и «обратно» занял одинаковое время. Если где-то по дороге пакет застрял в пробке только в одну сторону — часы соврут. Но для бытовых нужд такой точности хватает с головой, чтобы не опоздать на созвон, ее вполне достаточно.
Однако, даже эта умная система не застрахована от человеческой глупости. И иногда простое желание узнать время приводит к цифровым катастрофам.
Вообще, NTP устроен удивительно демократично. Если у вас есть деньги и паранойя, вы можете купить собственные атомные часы и поставить их в серверной. Если вы энтузиаст, можно поставить приемник GPS и забирать время со спутника, на котором такие часы стоят и который очень удобно это точное время рассылает. Но большинство устройств в мире — от вашего ноутбука до умного холодильника — просто верят на слово волонтерам.
Существует проект `pool.ntp.org` — гигантское сообщество энтузиастов, которые бесплатно раздают точное время всем желающим. Работает это на честном слове: разработчики софта обещают не наглеть и распределять нагрузку равномерно. Но иногда что-то идет не так.
Осенью 2024 года рунет залихорадило и сервера русского пула ntp.org перестали отдавать точное время. Оказалось, что виновата ошибка в обновлении Яндекс Станций. Тысячи колонок с Алисой вместо того, чтобы вежливо спрашивать время раз в час у собственного сервера Яндекса, начали каждые пять секунд долбиться в одни и те же публичные адреса. Это был классический, хоть и нечаянный, DDoS, распределенная атака на отказ в обслуживании. Естественно, при невозможности узнать точное время не только Яндекс-станции, но и добрая половина российского интернета отправились в глубокое прошлое.
И они в этом были не первые. Еще в 2003 году компания Netgear случайно зашила в прошивку своих роутеров IP-адрес одного-единственного сервера в Университете Висконсина. В один прекрасный день университетская сеть просто исчезла под наплывом сотен тысяч запросов от домашних роутеров со всего мира. Админы были в панике, думая, что их атакуют хакеры, а это были всего лишь тостеры и модемы, которые очень хотели быть пунктуальными.
Кстати, а почему недоступность NTP отправила всех в прошлое? Многие современные гаджеты — от дешевых камер наблюдения до умных розеток — вообще не умеют хранить время. У них внутри нет той самой батарейки, которая питает часы, пока прибор выключен из розетки.
Каждый раз при включении они просыпаются в «дне сурка» — это может быть 1 января 1970 года или любая другая дата в прошлом, жестко заданная заданная производителем. И первое, что они делают — бегут в интернет за точным временем по NTP.
Если интернета нет или сервер недоступен, устройство остается в прошлом. И тут начинаются проблемы.
Вы пытаетесь зайти на сайт, а браузер кричит: «Ваше подключение не защищено!». Почему? Потому что сертификат безопасности сайта выпущен в 2025 году и действует до 2026-го, а ваш компьютер уверен, что на дворе, например, 1970-й. Для него этот сертификат — из далекого будущего, которому нельзя доверять.
Или возьмите коды двухфакторной аутентификации. Google Authenticator или Яндекс Ключ или банковское приложение генерируют шесть цифр, которые живут ровно 30 секунд. Эти цифры не приходят из интернета. Ваш телефон вычисляет их сам, используя секретный ключ и... текущее время. Сервер для проверки кода делает то же самое. Если часы на вашем телефоне спешат хотя бы на минуту, вы сгенерируете код из «будущего», который сервер еще не ожидает. И вы просто не сможете войти в аккаунт. «Неверный код», — скажет система, и вы будете гадать, как вы смогли опечататься восемь раз подряд. Вот как вам может испортить жизнь расхождение времени всего на полминуты.
Однако есть места, где «плюс-минус даже одна миллисекунда» — это катастрофа. Возьмем современный концерт. Звук от микрофона идет в цифровой пульт, оттуда — в усилители, потом в колонки. Всё это соединено обычной компьютерной сетью. Если звук в левой колонке отстанет от правой хотя бы на пару миллисекунд, вы услышите «кашу», эхо и фазовые искажения. Музыка превратится в шум.
Или заводской конвейер. Две механические руки передают деталь друг другу на лету. Если их внутренние часы разойдутся на миллисекунду, одна рука разожмет пальцы раньше, чем вторая их сожмет. Деталь упадет.
Или взять современные энергосистемы. Ток в вашей розетке — это волна, которая колеблется 50 раз в секунду. Вся энергосистема страны — это тысячи гигантских турбин на электростанциях, которые должны крутиться в идеальном унисоне. Их волны должны накладываться друг на друга «гребень в гребень». Чтобы управлять этим оркестром, автоматика измеряет фазу тока тысячи раз в секунду. Если часы на подстанциях разойдутся, автоматика решит, что произошла авария, и начнет отключать целые города, чтобы спасти оборудование. Блэкаут из-за рассинхрона — реальный сценарий.
Для таких задач NTP слишком медленный. Поэтому инженеры используют PTP (Precision Time Protocol), который нужен для синхронизации времени в локальных сетях и обеспечивает микросекундную точность. Единственное что, для достижения этой точности ему необходимо, чтобы и сетевые карты на хостах, и все транзитные сетевые устройства на аппаратном уровне поддерживали этот протокол, поэтому не спешите апгрейдить ваш NTP на домашнем компьютере до PTP, под него требуется специально построенная сеть на специальном оборудовании. Если оборудование обычное - вся магия пропадет, и точность будет такая же, как у NTP.
Но самый безумный пример того, как время управляет нашей жизнью, находится у вас в кармане. Это GPS. Мы привыкли думать, что навигатор — это сложная карта. На самом деле, это просто радиоприемник, который слушает очень точные часы.
Как это работает? Вспомните грозу. Вы видите молнию, а потом считаете секунды до раската грома. «Раз, два, три...» — ага, гроза в километре от нас. Зная время задержки звука, вы узнаете расстояние.
GPS делает то же самое, только со скоростью света.
Каждый спутник — это «молния», которая непрерывно посылает радиосигнал со своей точной локацией и точным временем отправки. Ваш телефон — это секундомер. Он ловит сигнал и считает задержку.
«От первого спутника сигнал шел 0.06 секунды. Значит, до него 18 000 километров». Дальше телефон представляет себе вокруг расположения спутника воображаемую сферу этого радиуса. Вы где-то на ней.
Второй спутник дает вторую сферу. Третий — третью. В точке, где они пересекаются — стоите вы.
Но есть подвох. Чтобы этот фокус сработал, часы в вашем телефоне должны идти так же идеально точно, как атомные часы на спутнике за миллионы долларов. А у вас внутри — дешевый кристаллик кварца, который врет. Если часы телефона ошибутся всего на одну тысячную секунды, ошибка в расстоянии составит 300 километров. Вы будете думать, что вы в Москве, а навигатор покажет Тверь.
Инженеры решили эту проблему изящно. Телефон ищет не три спутника, а четыре. Четвертый сигнал нужен только для одного — чтобы вычислить ошибку ваших дешевых часов и скорректировать её. Благодаря четвертому спутнику ваш смартфон на секунду становится таким же точным хронометром, как и оборудование NASA.
Но даже этой магии мало. Потому что в дело вступает Эйнштейн со своей теорией относительности.
Спутники летят на бешеной скорости — 14 тысяч километров в час. Согласно специальной теории относительности, для них время течет медленнее, чем для наблюдателя на поверхности земли.
С другой стороны, они высоко, там гравитация слабее. Значит, по общей теории относительности, время там течет быстрее, чем для все того же наблюдателя.
Инженеры посчитали: в сумме часы на орбите убегают вперед на 38 микросекунд в день.
Для человека это ничто. Но для света 38 микросекунд — это 11 километров.
Если бы в чипы спутников не зашили формулы Эйнштейна, уже завтра ваш навигатор врал бы на 10 километров. Вы бы искали поворот во двор, а карта уверяла бы, что вы едете по соседнему лесу.
Каждый раз, когда вы заказываете такси, ваш телефон решает уравнения из теории относительности. И, к счастью, они сходятся.
Итак, мы научились синхронизировать часы в космосе. Но в некоторых системах иногда полезнее работать с заведомо ошибочным временем, чем пытаться обеспечить идеальную синхронность, которую все равно добиться не получится.
В таких системах критически важна причинно-следственная связь. Если пользователь сначала добавил товар в корзину (причина), а потом оплатил его (следствие), то в базе данных метка времени «добавления в корзину» должна быть строго раньше метки времени «оплаты».
Кажется очевидным? Только если у вас один сервер.
Но если сервер с корзиной стоит в Азии, а сервер оплаты — в Америке, начинается хаос. Даже с атомными часами между ними всегда есть крошечный рассинхрон. Если азиатские часы спешат, а американские отстают, система может записать, что оплата произошла *раньше* добавления в корзину. Причина и следствие меняются местами. Логика рушится.
Инженеры Google в проекте распределенной базы Spanner решили эту проблему радикально. Они создали систему TrueTime, которая знает не только время, но и свою погрешность — «интервал неопределенности».
И они ввели правило: запись в базу не считается завершенной мгновенно.
Получив событие, система ставит штамп времени и... ждёт. Она намеренно «подвешивает» операцию ровно на столько миллисекунд, сколько составляет максимальная возможная ошибка часов в сети.
Она ждет момента, когда на *всех* серверах Google, даже самых отстающих, время гарантированно уйдет вперед относительно этого штампа.
Только после этой паузы запись сохраняется. Фактически, данные всегда записываются «в прошлом» относительно идеально честного времени, и хоть это немного замедляет работу, но зато гарантирует железобетонный порядок событий. Мы платим временем за то, чтобы время не распадалось на куски.
Через кварцевые кристаллы, которые боятся холода, через лишние секунды, которые ломают интернет, и через спутники, которые стареют медленнее нас, мы выяснили, что идеальной синхронизации не существует. Время в нашем мире — это не точка на прямой, а «облако вероятностей». Это постоянная борьба с хаосом, где мы вынуждены «размазывать» секунды и специально тормозить базы данных, чтобы сохранить порядок причин и следствий.
Но, пожалуй, самое удивительное — не то, что часы врут. А то, что мы, люди, научились договариваться с этой ложью. Мы построили цивилизацию, где поезда ходят по расписанию, деньги переводятся за мгновения, а навигатор приводит нас точно к подъезду — вопреки тому, что Земля вращается криво, а время зависит от гравитации.
Мы никогда не узнаем, который сейчас час с абсолютной точностью. Но нам это и не нужно. Главное, чтобы в этом огромном, рассинхронизированном мире мы всё-таки могли найти друг друга. И чтобы важные слова всегда успевали вовремя.
Ведь если даже компьютеры научились ждать, чтобы понять истину, может, и нам стоит иногда не спешить?
Это был подкаст «До нас дошло». Спасибо, что уделили нам своё время. Оно бесценно. С вами были Иннокентий Солнцев и звукорежиссер Алексей Попов.
0 коментариев