Заглушка, которая стала данными: как мы нашли выдуманные характеристики у себя
У 10 провайдеров из 12 стоял одинаковый SLA 99,9%, а у 32 тарифов — Windows, которого там нет. Это были не данные, а значения по умолчанию, забытые при заведении. Рассказываю, как такие вещи появляются и чем их ловить.
Как появляется выдуманная характеристика
Когда заводишь нового провайдера, часть полей известна сразу, а часть — нет. Ставишь правдоподобное значение с намерением уточнить позже. Потом провайдеров становится двенадцать, «позже» не наступает, а заглушка выглядит как обычная строка в данных.
Обнаружилось это буднично: мы собрались писать хостерам письма с предложением поставить бейдж каталога на свой сайт. Письмо зовёт человека посмотреть свою карточку — и первое, на что он глянет, будут собственные характеристики. Проверять их пришлось до отправки, а не после.
Масштаб оказался больше, чем я ожидал. У 10 провайдеров из 12 стоял один и тот же SLA — 99,9%. У 11 из 12 совпадал набор возможностей: защита от DDoS, Windows, API — всюду одинаковые галочки. Это не совпадение рынка, это следы заполнения по шаблону.
Что оказалось неправдой
После сверки с сайтами картина изменилась. У Selectel заявленная надёжность облачных серверов не 99,9%, а 99,98%. У RuVDS на главной странице указано 99,982%. У FirstVDS — 99,5%, то есть заметно ниже «стандартного» значения, которое стояло у всех.
А у трёх провайдеров публично заявленного SLA не нашлось вовсе. Раньше поле было обязательным, и его приходилось чем-то заполнять — теперь оно опциональное, и там, где провайдер ничего не обещает, мы просто не показываем цифру. Пустое место честнее выдуманного числа.
С операционными системами вышло хуже, потому что на них стоит целая страница подборки. Выяснилось, что у части провайдеров список ОС не приходит из источника, а проставляется общим значением из конфига сборщика. В итоге 32 тарифа значились как поддерживающие Windows, хотя у одного из провайдеров Windows нет вовсе — только Ubuntu и CentOS.
Почему автосбор не спасает сам по себе
Казалось бы, автоматический сбор должен решать эту проблему: данные приходят от провайдера, выдумывать нечего. На практике у каждого адаптера есть блок значений по умолчанию — для полей, которых в источнике нет.
Из тринадцати провайдеров операционные системы реально приходят из источника только у трёх: у одного это флаг в ответе API, у другого иконки на карточке тарифа, у третьего они читаются из названия линейки. Остальным ОС проставляется скопом.
Вывод неприятный, но полезный: автоматизация переносит проблему, а не устраняет её. Раньше выдуманное значение вводил человек однократно, теперь его аккуратно проставляет скрипт при каждом запуске. Отличается только скорость.
Чем это ловится
Первое, что работает — подозрительная одинаковость. Если у десяти провайдеров совпадает число, которого не может быть одинаковым, это почти наверняка заглушка. Мы теперь смотрим на такие совпадения специально.
Второе — сделать поле необязательным. Обязательное поле заставляет что-то придумать; опциональное позволяет честно оставить пустоту. Это касается не только SLA: даты окончания акций мы тоже не показываем, потому что провайдеры их не публикуют, а выдуманный срок хуже отсутствующего.
Третье — валидатор, который отвергает невозможное. Он не даст записать скидку, где «обычная» цена ниже акционной, или частоту процессора в 3300 ГГц вместо 3,3 (такое бывает, когда источник отдаёт мегагерцы). Это не ловит враньё, но отсекает механические ошибки.
И четвёртое — публично признавать найденное. Эта статья и есть часть механизма: когда обязуешься рассказывать о своих ошибках, начинаешь их искать усерднее.
Что с этим делать читателю
Смотрите на однообразие. Если в таблице сравнения у всех провайдеров одинаковый SLA и одинаковые галочки возможностей — скорее всего, вы смотрите не на данные, а на шаблон заполнения.
Проверяйте критичное на сайте провайдера. Наличие Windows, точный SLA и условия защиты от DDoS — те вещи, из-за которых выбор меняется целиком, и их стоит подтвердить в первоисточнике.
И относитесь к пустым ячейкам лучше, чем к заполненным round-числами. Пустая означает «мы не нашли подтверждения» — это больше информации, чем уверенное 99,9% у всех подряд.