Новая архитектура Спайлога  Сергей Скворцов .masterhost 2008-09-22 $Revision::  56  $
SpyLog   – о компании  <ul><li>Система интернет-статистики и аналитики  </li></ul><ul><li>Компания работает с 1999 года; в...
Содержание <ul><li>Введение: предметная область </li></ul><ul><li>Постановка задачи </li></ul><ul><li>Архитектура </li></ul>
Введение: предметная область
Базовые сущности – взгляд пользователя <ul><ul><li>Посетитель </li></ul></ul><ul><ul><ul><li>VisitorID -  3 rd -party cook...
Как это работает? <ul><li>Вы регистрируете  счётчик , размещаете его  код  на своём  сайте </li></ul><ul><li>Посетители  х...
Статистика - основные термины <ul><ul><li>WAA – Web Analytics Associations </li></ul></ul><ul><ul><li>Page –  страница </l...
Какие данные собираем? <ul><li>Без   JavaScript  – базовые данные : </li></ul><ul><li>Timestamp –  дата и время </li></ul>...
Какие данные собираем? <ul><li>C   JavaScript  – технометрику и переходы : </li></ul><ul><li>Разрешение монитора, число цв...
Статистика:  что считаем? <ul><li>Посетители : </li></ul><ul><ul><li>Количество </li></ul></ul><ul><ul><li>Откуда пришли, ...
Статистика:  что считаем? <ul><li>Прочее : </li></ul><ul><ul><li>ОС </li></ul></ul><ul><ul><li>Браузеры </li></ul></ul><ul...
SpyLOG : немного чисел <ul><li>~ 22 0 млн .  pageview в день </li></ul><ul><li>~ 5.4 T B  данных за месяц </li></ul><ul><l...
Постановка задачи
Зачем нужно что-то новое?  <ul><li>Жизненный цикл архитектуры </li></ul><ul><ul><li>3-5  лет – средний срок  смены  архите...
Зачем нужно что-то новое?  - 2 <ul><li>Legacy codebase </li></ul><ul><ul><li>9 лет разработок, несколько поколений програм...
Новая жизнь с понедельника! <ul><li>Не всё так просто – есть условия и ограничения: </li></ul><ul><li>Обеспечить работоспо...
Новые цели и ориентиры <ul><li>Появляется много архитектурных идей </li></ul><ul><li>Как структурировать   и фильтровать? ...
Атрибуты качества <ul><li>Готовность (Availability)‏ </li></ul><ul><li>Производительность (Performance)‏ </li></ul><ul><li...
Архитектура + проектирование / дизайн и немного о реализации
Общая схема архитектуры
Источники  данных <ul><li>Forwarder’ ы </li></ul><ul><ul><li>Взаимодействие со Старым Спайлогом </li></ul></ul><ul><ul><li...
Выходные  данные <ul><li>Интернет-статистика, рейтинги сайтов </li></ul><ul><ul><li>www.spylog.ru </li></ul></ul><ul><li>Г...
Пример  ad-hoc   запросов <ul><li>Какой процент посетителей обновили браузеры на  Google Chrome? </li></ul><ul><ul><li>Про...
NG-Forwarder   или  Forwarder - NG <ul><li>Написан на основе  nginx 0.7.x </li></ul><ul><li>Большой резерв мощности </li><...
Forwarder :  асинхронный счётчик
Асинхронный счётчик:  JS ДАЖЕ НЕ ПЫТАЙТЕСЬ ПРОЧЕСТЬ ЭТОТ СЛАЙД <script type=&quot;text/javascript&quot;> var spylog   =   ...
Асинхронный  счётчик <ul><li>Оптимизирован под высоконагруженные сайты </li></ul><ul><li>Без  (!) картинки </li></ul><ul><...
Счётчик с  картинкой
Forwarder:   атрибуты качества <ul><li>Готовность </li></ul><ul><ul><li>Самая критичная подсистема </li></ul></ul><ul><ul>...
Forwarder & DNS:  разнесение <ul><li>Зачем? </li></ul><ul><ul><li>Отказоустойчивость (ДЦ: падение /потеря связи /перегрев)...
Forwarder:  детали <ul><li>Форвардеры ходят парами </li></ul><ul><ul><li>FreeBSD + CARP </li></ul></ul><ul><ul><li>Резерви...
GeoDB  –  БД по географии и  AS <ul><li>Forwarders  –  резолвинг во время запроса (ngx_http_geo_module)‏ </li></ul><ul><li...
Кластер :  вычисления <ul><li>Map/Reduce </li></ul><ul><ul><li>Функциональный подход </li></ul></ul><ul><ul><li>Использует...
Map / Reduce
Кластер :  хранение данных <ul><li>DFS  – Distributed File System </li></ul><ul><ul><li>Стандартная  HDFS   в  Hadoop </li...
Кластер :  роли серверов
Кластер:  атрибуты качества <ul><li>Отказоустойчивость  через резервирование </li></ul><ul><ul><li>Расчёт на ожидаемость п...
Кластер:  железо <ul><li>12  серверов : 2  CPU x  8 -Core;  8 GB RAM;  6 TB HDD </li></ul><ul><li>1Gbit network </li></ul>...
Web Services:  общая схема
REST API:  атрибуты качества <ul><li>U niform interface   –  HTTP </li></ul><ul><ul><li>Простота и очевидность кодирования...
REST API  -  открытый <ul><li>Можете  напрямую  получать свою статистику </li></ul><ul><ul><li>или даже  чужую , если она ...
Web Services:  типичный дизайн <ul><li>OS –  FreeBSD </li></ul><ul><ul><li>Всё внутри  jails </li></ul></ul><ul><ul><li>Ми...
Инфраструктура <ul><li>Гетерогенные сервера </li></ul><ul><ul><li>ОС, железо </li></ul></ul><ul><li>Кластер – в одном ДЦ <...
Итак, когда? <ul><li>Рассказ был про  архитектуру </li></ul><ul><li>Реализация  в самом разгаре </li></ul><ul><li>В октябр...
Вопросы? ( по теме доклада)‏ Сергей Скворцов [email_address]
Upcoming SlideShare
Loading in...5
×

Hl2008 Spy Log Architechture 169

381

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
381
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Hl2008 Spy Log Architechture 169

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

×