Новая архитектураСпайлога Новая архитектураСпайлога
Сергей Скворцов.masterhost
2008-09-22
Сергей Скворцов.masterhost
2008-09-22
$Revision:: 56 $
SpyLog – о компании SpyLog – о компании • Система интернет-статистики и аналитики • Компания работает с 1999 года;
в 2007 вошла в состав ГК «Мастерхост» • В первую очередь для:
– Владельцев сайтов и их маркетологов– Веб-разработчиков– Специалистов по рекламе
СодержаниеСодержание
•Введение: предметная область•Постановка задачи•Архитектура
Введение:предметная область
Введение:предметная область
Базовые сущности – взгляд пользователяБазовые сущности – взгляд пользователя
– Посетитель•VisitorID - 3rd-party cookie
– Счётчик•JavaScript–код и/или картинка
(pixel или «кнопка»)– Ваш сайт
•Как правило, 1 сайт = 1 счётчик– Отчёты (статистика)
Как это работает?Как это работает?1. Вы регистрируете счётчик, размещаете его
код на своём сайте
2. Посетители ходят по сайтам (в т.ч. по вашему), делают переходы
3. Мы собираем данные и генерируем для вас статистику
Статистика - основные терминыСтатистика - основные терминыWAA – Web Analytics Associations– Page – страница
• Точка входа, точка перехода, точка выхода
– Page View – просмотр страницы– Session - сессия– Visitor – посетитель
• Новый, повторный, возвращающийся, уникальный
– и т.п.
Какие данные собираем?Какие данные собираем?• Без JavaScript – базовые данные:
• Timestamp – дата и время• URI страниц• UserAgent → браузеры, ОС• IP address → география, AS• Cookie → VisitorID
Какие данные собираем?Какие данные собираем?• C JavaScript – технометрику и переходы:
• Разрешение монитора, число цветов• Наличие/версия Flash, Java• Timezone• Referrer перехода
Статистика: что считаем?Статистика: что считаем?•Посетители:
– Количество– Откуда пришли, куда ушли– Как часто ходят, где (пути по сайту)– Сколько времени провели– На какую рекламу кликали – OpenStat
Статистика: что считаем?Статистика: что считаем?•Прочее:
– ОС– Браузеры– География– Технометрика– Поисковые запросы– и т.д.
SpyLOG: немного чиселSpyLOG: немного чисел• ~220 млн. pageview в день• ~5.4 TB данных за месяц• ~1.4 GB отчетов за день• охват аудитории:
– ~30 млн. посетителей в неделю– ~84 млн. посетителей в месяц
из них ~40 млн. – из России
Постановка задачиПостановка задачи
Зачем нужно что-то новое? Зачем нужно что-то новое? • Жизненный цикл архитектуры
– 3-5 лет – средний срок смены архитектуры в динамично растущем проекте
– Меняются требования рынка– Меняются технологические среда и
окружение
Зачем нужно что-то новое? - 2Зачем нужно что-то новое? - 2• Legacy codebase
– 9 лет разработок, несколько поколений программистов
– Код: от палеолита до неолита– Проблема с change management– Рефакторинг: был невозможен не только
для кода, но и для архитектуры
Новая жизнь с понедельника!Новая жизнь с понедельника!• Не всё так просто –
есть условия и ограничения:• Обеспечить работоспособность веб-службы• Обратная совместимость со старыми
счётчиками• Обеспечить плавную (==плановую) замену
подсистем• Обеспечить возможность миграции данных
Новые цели и ориентирыНовые цели и ориентиры• Появляется много архитектурных идей• Как структурировать и фильтровать?
– Атрибуты качества архитектуры• Как критерии и обоснование, почему делаем именно
так, а не иначе
– Новые фичи, убиение некоторых старых– Неизбежные компромиссы
Атрибуты качестваАтрибуты качества• Готовность (Availability)• Производительность (Performance)• Модифицируемость (Modifiability)• Безопасность (Security)• Сопровождаемость (Maintainability)• Концептуальная целостность (Conceptual
integrity)
Архитектура
+ проектирование / дизайн
и немного о реализации
Архитектура
+ проектирование / дизайн
и немного о реализации
Общая схема архитектурыОбщая схема архитектуры
DFS: HDFSВиртуальный хостинг
Уровень БД
Уровень приложения
Веб-сайт
Сбор данных Вычислительный кластер
Map/Reduce: Hadoop
Forwarders
RESTAPI
Web-services
Источники данныхИсточники данных1. Forwarder’ы
– Взаимодействие со Старым Спайлогом– Передача данных в кластер
2. Логи виртуального хостинга– Замена webalyzer, analog, awstats и т.п.
3. Почтовые логи (недалёкое будущее)
Выходные данныеВыходные данные1. Интернет-статистика, рейтинги сайтов
– www.spylog.ru
2. Глобальная статистика и мониторинги рынков
3. Интернет-аналитика– Аналитические отчёты на заказ– Ad-hoc запросы (data mining)– Партнёрские сервисы - COMCON
Пример ad-hoc запросовПример ad-hoc запросов• Какой процент посетителей обновили
браузеры на Google Chrome?- Просто интересно :)
• На какие ещё сайты ходит аудитория сайта XXX?
- т.е. Медиапланирование• Самые интересные запросы превращаются в
отчёты– Или публикуются в Глобальной Статистике
NG-Forwarder или Forwarder-NGNG-Forwarder или Forwarder-NG• Написан на основе nginx 0.7.x• Большой резерв мощности
– Можем* считать 38 Яндексов и ещё один портальчег
• Полностью обратно-совместим со старой системой– Бинарный протокол и всё такое
• Данные в кластер передаются в виде просто текстовых логов
Forwarder: асинхронный счётчикForwarder: асинхронный счётчик
nginxForwarder
<script />
<img />
DFS: HDFS
Map/Reduce: Hadoop
access logs
Асинхронный счётчик: JSАсинхронный счётчик: JS
ДАЖЕ НЕ ПЫТАЙТЕСЬПРОЧЕСТЬ ЭТОТ СЛАЙД
<script type="text/javascript">
var spylog = { counter: NNN, next: spylog };
document.write(unescape('%3Cscript src="http‘+ (('https:' == document.location.protocol) ? 's' : '')
+ '://counter.spylog.com/cnt.js" defer="defer"%3E%3C/script%3E'));
</script>
Асинхронный счётчикАсинхронный счётчик• Оптимизирован под высоконагруженные
сайты• Без (!) картинки• Максимально быстрая загрузка• Отложенный parsing (defer - IE)• Несколько экземпляров счётчика на
странице• Разумеется, HTTPS
Счётчик с картинкойСчётчик с картинкой
nginxForwarder
<script />
<img />
DFS: HDFS
Map/Reduce: Hadoop
access logs
Картинкас числами
memcached
1 счётчик = ~ 64 байт в кэше
Forwarder: атрибуты качестваForwarder: атрибуты качества• Готовность
– Самая критичная подсистема– 100% uptime, минимальное время реакции
• Производительность– Максимальная (state machine rocks!)
– Stateless frontends → горизонтальное масштабирование
Forwarder & DNS: разнесениеForwarder & DNS: разнесение• Зачем?
– Отказоустойчивость (ДЦ: падение /потеря связи /перегрев)
– Быть ближе к посетителю• Варианты:
– DNS - split horizon (views) по AS– BGP – IP Anycast Routing
• Фильтруют анонсы• Только UDP
Forwarder: деталиForwarder: детали• Форвардеры ходят парами
– FreeBSD + CARP– Резервирование и балансировка нагрузки
• Вся текущая нагрузка держится 2-мя серверами в ДЦ Мастерхоста– Load averages: 0.80
• Сейчас ставим ещё пару - в Голландии• Хотите, поставим у вас?
GeoDB – БД по географии и ASGeoDB – БД по географии и AS• Forwarders – резолвинг во время запроса
(ngx_http_geo_module)• Web Services – лишь в качестве справочника• Т.е. нет центральной online database• Несколько источников данных,
верификация, регулярные обновления
Кластер: вычисленияКластер: вычисления•Map/Reduce
– Функциональный подход– Используется в Google– Мы взяли open-source реализацию:
Hadoop•Используется в Yahoo!, Facebook, etc.
– Детали – в отдельном докладе
Map / ReduceMap / Reduce
Кластер: хранение данныхКластер: хранение данных• DFS – Distributed File System
– Стандартная HDFS в Hadoop– Рассматривались другие:
•Lustre – POSIX-compatible; идёт портирование под FreeBSD
•KosmosFS – есть интеграция с Hadoop•GlusterFS
– В будущем может и сменим HDFS на другое
Кластер: роли серверовКластер: роли серверов
Data Node
Task Node
Data Node
Task Node
Data Node
Task Node
Name Node
Job Tracker
Кластер: атрибуты качестваКластер: атрибуты качества• Отказоустойчивость через резервирование
– Расчёт на ожидаемость падения data-nodes• Гетерогенные сервера
– Простота эксплуатации (сопровождаемость)– Установка ОС через PXE, развёртывание образа –
и запуск!
Кластер: железоКластер: железо• 12 серверов:
2 CPU x 4-Core; 8GB RAM; 6TB HDD• 1Gbit network• FreeBSD 7.0 amd64• Storage: gjournal + gmirror
– Раньше был ZFS (raidz), но высокую IO нагрузку не потянул
• Резервирование на уровне HDFS (3 реплики)
Web Services: общая схемаWeb Services: общая схема
DFS: HDFS
App: клиентский веб-интерфейс
nginx
App: REST API
Статистика / Отчёты
БД веб-службы
Внешние БД
REST API: атрибуты качестваREST API: атрибуты качества• Uniform interface – HTTP
– Простота и очевидность кодирования / использования
• Слоевая архитектура– Отделение клиентской веб-части от ресурсов/данных
• Кэшируемость– Важно как API, так и для AJAX / Flash
• Statelessness → load balancing• Как итог – хорошая масштабируемость
REST API - открытыйREST API - открытый• Можете напрямую получать свою
статистику– или даже чужую,
если она публично доступна :)
• Mashup – можете строить свои сервисы, использующие наши API– Поддержка протокола OAuth – что
безопасно для конечного пользователя
Web Services: типичный дизайнWeb Services: типичный дизайн• OS – FreeBSD
– Всё внутри jails– Минимум 2 instance серверов (CARP)
• Frontend – nginx• Application backends – Catalyst (Perl)• RDBMS – PostgreSQL
– Репликация или нет – зависит от приложения– Иногда в БД вообще нет нужды
ИнфраструктураИнфраструктура• Гетерогенные сервера
– ОС, железо
• Кластер – в одном ДЦ– Связность между ДЦ – 10Gbit
• Forwarders– В разных ДЦ
• Сервера для веб-сервисов – где угодно
Итак, когда?Итак, когда?• Рассказ был про архитектуру• Реализация в самом разгаре• В октябре 2008 выходит новый сайт:
trends.spylog.ru• Далее, по очереди, заменяются все старые
сервисы на новые• Ждите новостей!
Recommended