Это лежит, или только у вас?
Проверка с нескольких точек зрения запускает один и тот же тест — пинг, HTTP-запрос, DNS-запрос — с зондов в чужих сетях, в других странах, в тот же момент, когда вы запускаете его из своей. Это единственное изменение превращает вопрос без ответа («у меня работает — кто-нибудь ещё это видит?») в сравнение: если каждая точка зрения терпит неудачу, цель лежит; если только ваша — проблема живёт на пути между вами и ней. В этом руководстве объясняется, что на самом деле доказывает вторая точка зрения, ловушка anycast, в которую каждый попадается однажды, и как выполнить проверку с помощью глобального пинга на этом сайте.
Проблема «у меня работает»
Каждый канал инцидентов слышал обе фразы в один и тот же час: «сайт лежит» и «у меня работает». Обе могут быть честными сообщениями. Тест, запущенный с одной-единственной точки зрения — ваш ноутбук, ваш офис, одна машина мониторинга, — измеряет ровно одну вещь: опыт этой одной сети, на этом одном пути, в этот один момент. Он не может отличить сервис, лежащий для всех, от пути, сломанного только для вас: больной транзитный провайдер, региональное правило фильтрации, DNS-резолвер, возвращающий отравленные или устаревшие ответы, спор о пиринге тремя сетями дальше, о котором вы никогда не слышали. Изнутри единственной точки зрения всё это выглядит одинаково — сбой без обратного адреса.
Тикеты поддержки и страницы статуса страдают от той же геометрии. Страница статуса говорит «работает», потому что собственные зонды провайдера — сидящие в собственном районе провайдера — достигают сервиса без труда, пока целый регион не может. Пользователь сообщает «лежит», потому что его ISP глотает трафик в чёрную дыру, пока сервис жужжит. Ни одна из сторон не врёт; обе обобщают с одного стула. Исправление — не большая точность с того же стула. Это больше стульев.
Что доказывает вторая точка зрения
Добавьте зонды в других сетях — другие автономные системы, другие страны, другие виды соединений — и запустите идентичный тест со всех одновременно. Теперь аргументирует сам паттерн. Если зонды в пяти сетях на трёх континентах все терпят неудачу одинаково в одно и то же время, общий фактор — это цель: сервис, его хост или его собственная сеть лежат, и никакое количество локальных подкручиваний этого не изменит. Если четыре преуспевают, а терпит неудачу только зонд, ближайший к вашей ситуации, — или терпите неудачу только вы, — общий фактор переворачивается: цель стоит, а разрыв находится где-то на пути, который разделяют неудавшиеся точки зрения. Согласие между независимыми точками зрения — самое близкое к доказательству, что есть у вопроса «это лежит?».
Зонды, которые использует этот сайт, принадлежат сети Globalping, управляемой jsDelivr: тысячи маленьких программных зондов, размещённых добровольцами по всему миру, на всём — от серверов в дата-центрах до домашних соединений, — которые принимают стандартизированные измерения — пинг, traceroute, MTR, DNS и HTTP — и сообщают, что они увидели. Ценность — не какой-то один зонд; добровольная машина в одном городе — это анекдот. Ценность в том, что анекдоты независимы: разные сети, разные апстримы, разные режимы отказа, все отвечающие на один и тот же вопрос в одно и то же время.
Предупреждение про anycast и CDN
Вот ловушка, и каждый попадается в неё однажды: разные ответы из разных мест могут быть все правильными. Современные сервисы — это не одна машина в одном месте. Anycast анонсирует один и тот же адрес из многих мест, так что зонд во Франкфурте и зонд в Сан-Паулу, посылающие пакеты на «тот же» IP, говорят с разными физическими гранями, возможно на разных континентах инфраструктуры — одна здорова, другая перезагружается. CDN направляет каждого клиента к ближайшей грани, и грань может лежать в одном регионе, пока сервис безупречен в другом. Расхождение между зондами не является автоматически противоречием; для цели anycast расхождение — это дизайн, работающий как задумано, и вопрос становится «лежит где?», а не «лежит?».
DNS делает тот же пункт с другой стороны. Авторитетные серверы и резолверы выдают разные ответы по замыслу — GeoDNS возвращает адрес «ближайшей» грани, а EDNS Client Subnet позволяет резолверу спрашивать от имени вашего района, так что резолвер зонда в Токио и один в Техасе законно получают разные адреса для одного и того же имени (сравните их рядом с помощью проверки распространения DNS, когда вопрос в том, какие записи держит мир). Разные адреса с разных зондов — не свидетельство непоследовательности. Это свидетельство того, что имя занимается локализацией, — и они говорят вам, с какой гранью на самом деле встретятся пользователи каждого региона.
Выберите измерение, которое отвечает на вопрос
Глобальный пинг предлагает пять типов измерений, и хороший выбор значит больше, чем запуск многих. Каждое отвечает на разный вопрос, и запуск неправильного даёт уверенный ответ на то, о чём вы не спрашивали. Сопоставьте тип с симптомом, прежде чем смотреть чьи-либо результаты.
Пинг отвечает на самый узкий вопрос: достижима ли цель отсюда и сколько теряется по пути? Это правильный тест для «может ли эта сеть вообще видеть тот хост» и неправильный тест для всего, что касается приложения, — хост может отвечать на пинг, пока его веб-сервис мёртв. HTTP отвечает на вопрос пользователя: проходит ли настоящий запрос оттуда, с каким кодом состояния и сколько времени заняло всё целиком? Когда спор — «сайт работает / сайт не работает», HTTP с нескольких зондов — это свидетельство, которое обе стороны должны принять. DNS отвечает на вопрос имени: какие адреса каждый регион на самом деле получает для этого имени? Так вы отделяете «сервис лежит» от «мой регион отправляют к мёртвой грани».
Traceroute отвечает на вопрос «где»: по хопам, где путь от этого зонда к цели останавливается, застревает или сворачивает в неожиданное место? Запускайте его с неудающейся точки зрения, а не с той, что работает. MTR — это traceroute во времени: тот же путь, зондируемый повторно, так что потери и задержка показываются по хопам как показатели, а не как один замороженный образец; это инструмент для «ломается время от времени», где одиночный traceroute ловит путь в день хорошего поведения. Дисциплина для всех пяти: решите, какой отказ вы тестируете, выберите единственное измерение, которое может его увидеть, и пусть остальные подождут.
Читать результаты, не обманывая себя
Начните с разделения двух чисел, которые люди привычно сливают. Потеря — запросы, которые никогда не вернулись, — это ущерб; задержка — запросы, которые вернулись медленно, — это дискомфорт, и у них разные причины и разные исправления. Зонд, показывающий 100 % потери, нашёл стену; зонд, показывающий нулевую потерю и высокую задержку, нашёл длинную или перегруженную дорогу, и сообщение о втором как «лежит» — это то, как здоровые сервисы будят среди ночи. Затем сравнивайте подобное с подобным: берите медианный зонд как историю, не лучший и не худший. Один зонд, возвращающий дикий выброс — огромную задержку, тайм-аут, которого никто больше не видел, — это утверждение о моменте этого зонда, его хосте или его апстриме. Свидетельством о цели оно становится только тогда, когда независимые зонды с ним согласны.
Следите и за бухгалтерией. Один зонд, сообщающий о цели как «офлайн», пока его соседи преуспевают, скорее всего сообщил о себе самом — упавший зонд, домашнее соединение, которое оборвалось, локальный фильтр, — а у добровольных зондов есть всё это; это цена сети, которой никто не управляет централизованно. Записывайте метки времени и относитесь к устаревшим или кэшированным результатам как к истории, а не к новостям. И когда каждый зонд согласен, что цель стоит, а ваши пользователи всё равно не могут её достичь, верьте обоим: вы узнали, что отказ реален и узок — он живёт на пути, который ни один из ваших зондов случайно не разделял, что является находкой, а не противоречием.
Честные ограничения
Зонды — добровольцы, и сеть ведёт себя соответственно. Зонды приходят и уходят — место, доступное этим утром, может быть офлайн сегодня вечером, покрытие плотное в некоторых странах и тонкое до несуществующего в других, и вы не можете требовать зонд внутри конкретного ISP только потому, что там ваши пользователи. Зонды также сидят в основном в дата-центрах и на соединениях энтузиастов, а не в жилых и мобильных сетях, из которых ваши настоящие пользователи выходят в интернет; зонд из дата-центра доказывает, что сервис достижим из хорошо подключённых мест, что составляет большую часть вопроса, но не весь вопрос. Относитесь к карте как к щедро нарисованной выборке сетей мира — не как к миру.
Использование этой сети этим сайтом намеренно скромно: оно работает на анонимном, общем бесплатном уровне Globalping, так что проверки несут лимиты на посетителя, а результаты кратко кэшируются, вместо того чтобы долбить добровольный ресурс, — если проверка просит вас подождать, это общий уровень, который делится. В этих пределах рабочий паттерн таков: запустите здесь проверку с нескольких точек зрения, чтобы уладить «лежит или только у меня», а затем углубитесь на стороне победителя — проверка здоровья веб-сайта для всего, что один подробный взгляд на сайт может вам сказать, и свежий раунд из глобального пинга, как только вы что-то изменили. Лежит-для-всех и лежит-только-для-вас нуждаются в разных послеобеденных планах; десять минут чужих точек зрения — вот как вы выясняете, какой именно полдень у вас идёт.
Часто задаваемые вопросы
Из скольких мест следует тестировать?
Этот инструмент запускает до четырёх мест на проверку, и четыре хорошо выбранных бьют сорок выбранных случайно. Выберите разброс, соответствующий спору: один зонд рядом с вашими собственными пользователями, один на другом континенте, один рядом с хостингом цели и один где-нибудь далеко в качестве контроля. Если близкие и далёкие зонды согласны, у вас есть ответ; если терпят неудачу только близкие, вы также локализовали проблему. Больше мест помогает главным образом тогда, когда первые четыре расходятся в паттерне, который вы ещё не умеете читать.
Зонд говорит «офлайн» — сайт лежит?
Не на этом свидетельстве одном. Один зонд может быть офлайн сам — упал, отключился или находится за собственным фильтром, — а у добровольных зондов нет оператора, который бы их гарантировал. «Лежит» — это вывод, который вы делаете из согласия: несколько независимых зондов, в разных сетях, терпящих неудачу одинаково в одно и то же время. Один зонд, терпящий неудачу, пока его соседи преуспевают, говорит вам о пути этого зонда, и честное сообщение — «недостижимо с этой одной точки зрения», а не «лежит».
Почему один и тот же домен разрешается в разные адреса с разных зондов?
Потому что так и должно работать. GeoDNS и EDNS Client Subnet делают ответы DNS зависимыми от того, откуда, по-видимому, приходит запрос, так что каждому региону вручается адрес его ближайшей здоровой грани; anycast и CDN опираются на тот же трюк на уровне маршрутизации. Разные адреса с разных зондов — это локализация, делающая свою работу. Находкой это становится только тогда, когда адрес одного региона мёртв, пока остальные работают, — тогда имя добросовестно отправляет пользователей этого региона к сломанной грани.