Хаброметр: глобальное обновление

Наконец-то у меня нашлось время заняться Хаброметром. Он уже давно работал с перебоями, но не смотря на этой сервисом пользовались тысячи пользователей. В сентябре этого года я собрался с силами и выпустил новую вторую версию сервиса.

Процитирую новость с сайта:

Хаброметр обновлен до версии 2.0. Полностью обновлен дизайн сайта, улучшен его функционал. Усовершенствован алгоритм получения хабра-значений с сервера Хабрахабра. Исправлены ошибки в коде. Отдельные фрагменты кода отрефакторены. Исходный код перенесен из svn в git и с Google Code на GitHub.

В последнее время сервис работал неисправно. Прежде всего это было связано с тем, что количество пользователей в базе значительно превышало предполагаемые в начале (почти 4 года назад) масштабы. Для решения возникших проблем пришлось применить кардинальные меры: удалить большую часть базы зарегистрированных пользователей и внедрить captcha при регистрации. Об отборе пользователей для удаления я расскажу отдельно. На данный момент в базе примерно 20 000 пользователей (из более чем 50 000 до «зачистки»).

Далее я расскажу о проблемах и причине «зачистки».

Запущен Хаброметр был в 2009 году. Написан на скорую руку довольно простым в плане архитектуры кодом на PHP. Изначально весь код был открыл и лежал в Google Code.

Пользователи постепенно регистрировались и вставляли свои информеры на разные странички. Постепенно росла база пользователей. До января 2012 года количество зарегистрированных пользователей было около 1000. Но в январе база резко вырасла. Судя по всему, кто-то натравил на форму регистрации бота. Защиты от подобных действий вначале я не делал, так как не думал, что нужно. Разбираться в подросностях времени не было, я никого не стал удалять. И капчу тоже не поставил. Лишь сменил время обновления информции с сервера Хабрахабра — было каждых 2 часа, стало 2 раза в сутки, а потом вообще 1 раз в сутки. Одноко хаброметры то обновлялись, то не обновлялись. Наблюдался некоторый бардак.

В сентябре, когда я поставил цель привести сервис в порядок, в первую очередь был проведен анализ причин бардака с обновлениями. Выяснилось, что:

  1. данные с Хабрахабра обновлялись очень долго, так как база выросла до 50 000, а на обновление одного пользователя уходило около секунды (параллельных запросов я не делал, так как это было запрещено правилами для ботов);
  2. во время обновления постоянно возникали ошибки, когда запрос отваливался по тайм-ауту; у меня стояла защита — после 30 ошибок процесс обновления прекращался; таким образом до последних пользователей обновления просто не доходили.

Очевидно, что реально пользовались сервисом гораздо меньше, чем 50 000 пользователей. Чтобы снять ненужную нагрузку с сервера Хаброметра и Хабрахабра я решил почистить базу.

Были удалены все пользователи, для которых хаброметры ни разу не запрашивались реальными пользователями, у которых не установлен e-mail и карма меньше 5. Таких оказалось около 32 000.

Я взял логи веб-сервера за всю историю его существования и обработал их: исключил запросы к информерам от ботов Яндекса и Гугла. Далее я вытянул тех пользователей, для которых запросы в логах остались. Пересек получившийся список со списком всех пользователей в базе — те, кто не попали в пересечение, стали кандидатами на вылет.

Далее, из кандидатов на вылет были исключены те, кто оставлял свой e-mail при регистрации (что явно говорит о том, что регистрировался не бот), и те, у кого карма 5 и больше. Оставшиеся в списке пользователи были удалены вместе с историей их значений.

Сейчас на сервисе остается чуть больше 18 000 пользователей. Обновление данных для них будет проходить около 18 000 секунд, т.е. 5 часов. Запускается обновление в 12 ночи, так что к утру все информеры будут обновлены.

Сейчас в форме регистрации вставлена captcha, чтобы предотвратить подобные пробоемы в будущем.

Кстати, код Хаброметра открыт под лицензией GPL3 и выложен на GitHub (ссылка выше). Каждый желающий может поучавствовать в его доработке, или запустить клона на своем сервере.

Об авторе Валера Леонтьев

Программист PHP/MySQL.

Запись опубликована в рубрике IT, Web, Все рубрики с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий