Описание принципов работы счетчика Extra Web Top

(по состоянию на апрель 2004 года)

Рейтинг Extra Web Top предназначен для регистрации количества посещений интернет-сайтов, анализа временной динамики популярности сайтов и отслеживания хостов, с которых происходят обращения. Данный проект не был первым в своей области, он начал работу только в начале 2002 года. До него в России и в Украине уже был создан ряд аналогичных проектов (Rambler, Topping и др.).

При создании Extra Web Top, компания Extra Systems, как обычно, исходила из соображений надежности, скорости и безопасности. Кроме того, в данном случае также стояла задача обеспечить точность процесса регистрации посещений, так чтобы отсутствовали "пропуски" в процессе помещения в базу данных записей о непрерывно (и в произвольные моменты времени) поступающих событиях запроса счетчиков.

Первая реализация проекта Extra Web Top (2002 год) была сделана "прямолинейно": все поступающие запросы (как на получение самих счетчиков, так и на получение страниц статистики) обрабатывались интернет-сервером, построенным по принципу ESIS, то есть при непосредственном взаимодействии с базой данных.

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

В результате осмысления создавшихся проблем было принято решение о кардинальной переработке данного проекта. Идея состояла в полной изоляции сервиса, работающего с клиентскими запросами, от базы данных. В итоге было написано два программных модуля, один из которых отвечает на вызовы по HTTP, а другой (совершенно не имея никаких дел с клиентами) - взаимодействует с базой данных. Первый модуль обращается к базе данных только один раз - в момент своего запуска. При этом он читает оттуда всю необходимую ему информацию о клиентах в ОЗУ и в дальнейшем опирается только на нее. При получении запроса на счетчик, этот модуль формирует картинку на основании имеющейся у него информации, а также записывает отчет о каждом таком событии в специальный файл протокола (лог), который и является точкой взаимодействия этого модуля с другим (работающим с базой данных). Такое построение первого модуля обеспечивает очень быструю отдачу клиентам запрашиваемых ими счетчиков и исключает любую возможность отказа в обслуживании. Периодически активизируемый второй модуль, читает указанный файл протокола (лог) и извлекает оттуда записи о событиях, которые случились с момента его предыдущего запуска. Каждое извлеченное событие помещается ним в базу данных в однопоточном, монопольном и синхронном режиме, что обеспечивает отсутствие каких бы то ни было вложенных транзакций, а сама база данных в результате этого постоянно находится в идеальном состоянии. На втором этапе этот модуль формирует из базы данных (в таком же однопоточном и монопольном режиме) статические html-страницы статистики, которые отдаются клиентам стандартным способом через отказоустойчивый http-сервер ESVH.

Испытания описанного выше нового подхода к организации учета посещений интернет-сайтов прошли вполне успешно, и работа Extra Web Top уже около двух недель ведется по указанным нами принципам. За этот период не было отмечено ни одного случая задержки с ответом на запрос счетчика, не говоря уже об отказах в обслуживании. Периодически производившаяся проверка состояния базы данных всякий раз показывала, что та находится в великолепном состоянии и совершенно не нуждается ни в каком обслуживании со стороны администратора (DBA). Таким образом, можно со всей уверенностью констатировать, что предпринятые переделки позволят системе Extra Web Top на той же технической базе обеспечить поддержку намного большего количества интенсивно посещаемых сайтов, чем это мы могли себе позволить на начальном этапе развития данного проекта.