New SpyLOG architechture (Highload 2008)

Preview:

DESCRIPTION

Новая архитектура Спайлога (2008)

Citation preview

Новая архитектураСпайлога Новая архитектураСпайлога

Сергей Скворцов.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• Далее, по очереди, заменяются все старые

сервисы на новые• Ждите новостей!

Вопросы?

(по теме доклада)

Вопросы?

(по теме доклада)

Сергей Скворцов

skv@masterhost.ru