Кто узнаёт о поломке первым
Страница грузится, грузится — и сдаётся. Что делает почти любой человек? Закрывает вкладку и уходит туда, где работает. Жаловаться владельцу в этот момент никому не приходит в голову — да и куда: кнопки «сообщить о поломке» на сломанном сайте нет, и быть не может, потому что она была бы частью того самого сайта.
Теперь встаньте по другую сторону. Вы — владелец. Как вы узнаете, что сайт сломался? Честный ответ, к которому рано или поздно приходит каждый: последним. И дело не в безалаберности — у этого есть причина, вшитая в устройство вещей.
Первая мысль — «ну сайт же сам скажет». Не скажет. Сообщение о поломке — одна из функций сайта. Сломался сайт целиком — сломалась и эта функция: выключенный сервер не отправляет жалоб, зависший не отвечает, а полурабочий ещё и бодро рапортует, что всё хорошо, — это самая коварная разновидность. Можно приделать к сайту вторую систему, которая следит за первой и докладывает. Но тогда никуда не девается вопрос: а кто следит за второй? Цепочка упирается в одно — где-то снаружи должен стоять наблюдатель, который сам не зависит от того, за чем наблюдает.
На пользователей тоже рассчитывать не получается, и это не неблагодарность, а арифметика. Жалоба — это работа: найти контакт, описать, что случилось, дождаться ответа. Пользователь вам эту работу не должен. Для него неработающий сайт — не чрезвычайное происшествие, а «зайду позже или к конкуренту». Пишут те, кому совсем невмоготу, — и пишут не тому, кто чинит, а туда, куда проще: в поддержку, в комментарии, в соцсети. Пока сигнал дойдёт до человека с доступом к серверу, пройдёт время, которое уже не вернуть.
Что пробуют первым — и почему это не помогает
Первое движение почти у всех одинаковое: открыть самому. Открылось — выдохнуть. Не открылось — спросить коллегу: «а у тебя?» Рефлекс честный, а результат — тупик, и вот почему, по устройству, а не по чьему-то опыту.
Арифметика внимания. Чтобы заметить сбой через минуту после его начала, кто-то должен смотреть на сайт каждую минуту. Человек так не может: ночь, выходные, отпуск, обед. Поломка случается не в момент взгляда, а между взглядами — и до следующего взгляда о ней никто не знает. Заглядываете на сайт раз в день — сбой может прожить незамеченным сутки. Никакая дисциплина этого не лечит: у внимания нет круглосуточного режима.
«У меня открывается» — слабое доказательство. Ваш компьютер, ваш город, ваш провайдер. Дорога от пользователя до сайта у всех разная, и ломается чаще не сам сайт, а дорога: сайт может не открываться у целого региона — и при этом прекрасно работать у вас на столе. Проверка с одного компьютера проверяет одну дорогу из миллионов.
И самое обидное: сайт, который «открывается», не обязательно работает. Главная страница бывает жива, а оплата — мертва. Взгляд на витрину об этом молчит.
Итого: смотреть надо всегда, снаружи и не на витрину. По размеру это нечеловеческая задача. Значит, смотреть должна программа.
Робот, который открывает страницу
Устройство такой программы нехитрое, и в этом его прелесть. По расписанию она делает то же, что сделал бы человек: открывает адрес, ждёт ответа, сверяет его с ожиданием. Не дождалась — сигнал. Получила ошибку вместо страницы — сигнал. Страница собралась, а обязательного в ней нет — сигнал.
А теперь тонкость, ради которой всё затевается. «Сломался» — не одно состояние, их минимум три, и чинятся они по-разному.
Машина не отвечает вовсе — выключена, зависла, дорога до неё оборвана. Машина отвечает, но вместо страницы отдаёт ошибку — жива, но не работает. Страница открывается, а главное действие на ней не выполняется: кнопка нажимается в пустоту, форма уходит в никуда, корзина оформляется, а оплата не проходит.
Под каждый уровень нужна своя проверка. Самая простая — «ответь-ка» — ловит только молчание. Проверка «в странице должно быть то-то» ловит ошибку. Действие ловится только действием: робот сам проделывает путь пользователя — заходит, кладёт товар в корзину, жмёт кнопку — и смотрит, куда путь привёл. Такая проверка дороже и капризнее: медленнее, требует поддержки, ломается сама. Но без неё вы честно узнаёте только о смерти сайта, а не о его болезни.
Дальше два обязательных условия.
Проверялка обязана жить снаружи. Поставьте её на ту же машину — она умрёт вместе с сайтом, и последняя строка её журнала будет «всё в порядке». Поставьте рядом, в ту же сеть — она не увидит обрыва дороги, который видят пользователи. Смотреть надо с другой машины, из другой сети, в идеале из другого города. Наблюдатель не должен зависеть от наблюдаемого — правило старое, и здесь оно работает буквально.
И частота — это арифметика, а не магия. Сбой начинается в случайный момент между проверками, значит, в среднем о нём узнают через половину интервала. Подставьте свой интервал — получите своё худшее время незнания; добавьте время, пока дежурный продрёт глаза и доберётся до кнопки. Дальше цена: проверять чаще — дороже и шумнее, реже — дольше не знаете. Точку баланса надо считать от вопроса «сколько мне стоит час незнания», а не от «как у всех».
Почему робот врёт в обе стороны
Внешний робот закрывает задачу «узнать», но приносит две новые: он умеет успокаивать зря и паниковать зря.
Ложное спокойствие. Робот проверяет то, что вы ему сказали, и только это. Сказали проверять главную — он будет бодро рапортовать, что главная открывается, пока у вас не оформляется ни один заказ. Зелёный огонёк на панели означает «проверка проходит» — это другое утверждение, чем «сайт работает», и зазор между ними — место, где живут самые дорогие поломки. Поэтому вопрос «что считать поломкой» важнее вопроса «чем проверять»: сначала решаете, что именно обязано работать, и только потом — чем это ловить.
Ложная паника. Робот — тоже машина со своей сетью, и у неё тоже бывают сбои. Пропала сеть у проверялки — и она докладывает: сайт мёртв. Сайт жив-здоров, а вы уже проснулись и подняли людей. Одна такая ночь — неприятно; несколько — и на сигналы перестают реагировать. Тут чистая психология, без приборов: сигнал, который часто врёт, приучает его не слушать. Дежурный, которого много раз поднимали по ложной тревоге, на следующую поленится — и тревога окажется настоящей.
Поэтому проверку устраивают в два этажа: заметил — перепроверь; заметили двое с разных концов — тогда сигнал. И у каждого сигнала спрашивают: что случится, если посмотреть на это утром? Ответ «ничего страшного» означает, что у сигнала нет права звонить ночью. Будить человека может только то, что не терпит до утра.
Что видно снаружи, а что — только изнутри
Внешняя проверка видит симптом: в такой-то момент страница перестала отвечать, кнопка перестала приводить к оплате. Почему перестала — снаружи не видно. Чтобы понять причину, нужно, чтобы сервер в момент поломки рассказывал о себе: что делал, с кем разговаривал, что ему ответили. Такие записи пишутся заранее и непрерывно, на всякий случай — потом их не восстановишь. Если записей нет, починка превращается в раскопки: есть момент времени, мёртвый сайт — и больше ничего.
Что именно оставлять в записях, а что не писать, — разговор отдельный и не проще этого: записать всё невозможно, а записать мало — остаться без улик. Мы об этом писали: «Что писать в трассировку, а что нет».
Позиция редакции
Мы считаем: у любого сайта, который нужен кому-то, кроме его владельца, должна быть внешняя проверка главного действия — того, ради чего сайт существует. Не главной страницы и не «сам открою и гляну». Продаёте — проверяется дорога до оплаченного заказа. Показываете новости — что страница новости собирается с текстом внутри. И сигнал с этой проверки обязан доходить до живого человека, который может что-то сделать, иначе это не проверка, а дневник наблюдений.
Почему главное действие, а не витрина: страница — витрина, действие — продукт. Витрина бывает целёхонькой при мёртвом продукте, и ни одна проверка попроще об этом не скажет.
Наша позиция неверна при одном понятном условии: когда проверка сама обходится дороже незнания. Это не оговорка, а арифметика из двух чисел, и оба читатель считает сам.
Первое число — цена незнания. Прикиньте, сколько вам стоит час, в который сайт молчит, а вы не знаете: недошедшие покупатели, брошенные корзины, письма, которые вернутся с осуждением. Умножьте на худшее время незнания — половину интервала проверки плюс время до реакции. Подставьте свои величины.
Второе число — цена проверки, и она растёт от механизма, о котором молчат красивые демонстрации. Робот, проверяющий дорогу до оплаченного заказа, либо действительно оформляет заказ — и тогда в ваших данных селятся заказы-призраки, которых надо отличать от настоящих и вычищать, — либо сайт должен узнавать его как служебного и пропускать мимо кассы, а служебный режим надо спроектировать, построить и поддерживать, и проверяет он отчасти уже не настоящий сайт, а его служебную копию. Плюс ложные тревоги: каждая стоит сна и — дороже — доверия к сигналу. Плюс чей-то труд на починку самой проверки, когда она сломается, а она сломается.
Если второе число больше первого — мы неправы, и для вашего сайта внешняя проверка главного действия — церемония: достаточно проверки попроще, а то и ничего. Мы не можем посчитать это за вас, величины у каждого свои, и в этой честности — слабость любой универсальной рекомендации, включая нашу.
И остаётся вопрос без красивого ответа: а кто проверяет саму проверялку? Формально — вторая, тоже снаружи. Формально у этой лестницы нет конца. На практике её обрывают там, где молчание очередного звена стоит дешевле, чем его постройка и содержание, — и это снова арифметика, в которую каждый подставляет своё.