310 likes | 470 Views
Система внутренней статистики odnoklassniki.ru. Александр Шарак Руководитель отдела статистики Одноклассников. Зачем ?. Оценивают эффективность Устанавливают цели Отслеживают достижение целей Наблюдают за активностью пользователей. Менеджеры. Статистика.
E N D
Система внутренней статистики odnoklassniki.ru Александр Шарак Руководитель отдела статистики Одноклассников
Зачем? • Оценивают эффективность • Устанавливают цели • Отслеживают достижение целей • Наблюдают за активностью пользователей Менеджеры Статистика • Следят за качеством работы компонентов сайта • Расследуют аномалии Разработчики Администраторы • Мониторят компоненты сайта • Наблюдают за активностью пользователей • Расследуют аномалии
Дешборд http://www.flickr.com/photos/lofink/4501610335/
Собственная WEB-аппликация для работы с дешбордами http://www.flickr.com/photos/lofink/4501610335/
Немного цифр • Сайт логирует больше одноготриллиона (1 000 000 000 000) действийв день. • Свежие данные подгружаются с задержкой в 2-3 минуты. Почти в режиме реального времени. • В часы пик сотрудники запрашивают до 40 графиков в секунду. • Отдельный график в среднем высчитывается менее чем за одну секунду.
Агрегация данных Как обычно делают Как делаем мы Тысячи серверов логируют действия в локальное или удаленное хранилище(чаще всего это файл). Мега-кластер (например, Hadoop) из сотни серверов забирает эти терабайты (или петабайты) с даннымииагрегирует. Тысячи серверов не логируют каждое действие, а в памяти сразу агрегируют эти действияпо:а) типам операцийб) значениям классификаторовв) 5 минутам Раз в 5 минут каждый сервер передаёт собранную информацию в одну из четырех промежуточных баз данных (MS SQL)
Агрегация данных • Таким образом, мы вместо 10 миллиардов(10 000 000 000) записей за пять минут в час пик получаем всего 10 миллионов (10 000 000). • Задача загрузки данных в DWH стала относительно простой.
Загрузка данных Более 3000 серверов Все 4 базы имеют одинаковую структуру. Каждая содержит 300 таблиц Каждые 5 минут Logs - 1 Logs - 2 Logs - 3 Logs - 4 Выгрузка в одном потоке требует 0.5 сек на таблицу Как можно чаще DWH 1 DWH 2 Одна половина таблиц — сюда… …а вторая — сюда.
Структура таблиц • В каждой базе содержится по 150 таблиц с похожей структурой, легко поддающейся автоматизации. • В каждой таблице:1) колонка Registered2) ссылки на классификаторы3) измерения
Индексы • Индексы на дату и на каждый классификатор (foreign key),как«по учебнику» - не работают. • Сейчас у нас у каждой таблицы один кластерный индекссо структурой(Registered, id_classifier1, id_classifier2…)
Агрегаты по дням • Для каждой из 300 таблиц мы построили агрегаты по дням. • Количество записей в этих таблицах в 20- 150 раз меньше, чем в основных таблицах.
Базы с данными за один месяц • Оперативные графики в 99% случаев используют данные не старше одного месяца. • Сделали базу, где храним данные за последний месяц. График Полный архив Многократный прирост производительности 1% 31 день
MS SQL partitioning and compression • удаление старых данных за 1 минуту вместо 2 часов • данные на диске «сжались»в3.5 раза • подсчет графиков ускорился в несколько раз • загрузка данных происходит на 20% медленнее
И все тормозит… • На оперативных графиках обычно выводятся данные за 5 дней. • Один день данных одной таблицы по размеру больше среднего занимает 0.5 GB. То есть для 5 дней надо считать с диска 2.5GB данных. • Дисковая подсистема обеспечивает скорость до 100 Mb/s. Получается 25 сек в эксклюзивном режиме для таблиц больше среднего. • Самый популярный дешборд состоит из 80 графиков. • А если запустить дневной график за месяц или год…
Решение! • Представьте, что в момент X кто-то запрашивает некий график. • Через два часадругой пользователь запрашивает тот же график. • Как получить новый график из предыдущего?
DWH cache для 5 мин. графика • Вместо чтения 2.5GB надо считывать в 60 раз меньше данных. То есть всего 41Mb. При скорости 100Mb/s это меньше 0.5 сек. • Чем популярней график – тем он быстрее строится. • 99% процентов графиков стали строиться очень быстро. • 1% графиков строится относительно медленно.
DWH cache • Система стала стабильной…
На чём написано • MS SQL 2008 R2 Enterprise Edition • От использования MS SQL Integrity Services мы отказались • Весь код загрузки и обработки данных написан на T-SQL • Весь код подсчёта графиков также написан на T-SQL • Весь код DWH-cache также написан на T-SQL • Для построения (rendering) графиков(и отчётов в целом) используем MS SQL Reporting Services
Неагрегированные данные • Данные, в которых есть идентификатор пользователяи точная дата со временем • Например: • логины (29.5 млрд записей за 2011 год), платежи, граф дружб, дарение подарков, загруженные фотки и другая информация • Из этих данных мы высчитываем: • количество уникальных пользователей, которые сделали какие-то действия и/или обладают каким-то свойством • например, сколько девушек из Самары 18-23 лет подружилось с юношами из Москвы старше 50 лет • MS SQL 2008 R2 Enterprise Edition • Всю обработку данных пишем на T-SQL • Front-end – MS SQL 2008 R2 Reporting Services
OLAP • Используем MS SQL 2008 R2 Analysis Services • Опыт - один год • Построили десять разных кубов • Средний объем куба – 1 млрд записей в таблице фактов • Объем самого большого куба – 4.5 млрд записей • В каждом кубе присутствует мера – distinct count • Мера distinct countвынуждает ограничивать объём куба • С мерами countи sumпроблем нет • Мешает ограничение размера одного измерения
Ресурсы • Статистикой занимается 4 разработчика • Начал разработку одинчеловек • Разработка первой версии заняла 3 месяца • Каждый год добавляем по одному разработчику • Сервера – 30 (типичный сервер –2 6-core CPU, 80GB RAM, 6-10TB Diskarray): • 4 сервера для Reporting Services • 2 сервера для front-end • 7 серверов для данных 5-минутных и дневных графиков • 4 сервера для промежуточных баз данных • 6 серверов для статистики об объектах (userid) • 7 серверов для OLAP
Спасибо за внимание! • Александр Шарак • Руководитель отдела статистики • Одноклассники • aleksandr.sharak@odnoklassniki.ru
Пожалуйста, поставьте оценку моему докладу. Ваше мнение очень важно.Спасибо!