Highload2009 Top100 V3

1,637 views
1,596 views

Published on

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

  • Be the first to like this

No Downloads
Views
Total views
1,637
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
52
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Highload2009 Top100 V3

  1. 1. Модернизация высоконагруженного проекта на примере Рамблер ТОП100 Антон Горохов
  2. 2. Функции ТОП100 <ul><li>Каталог – сайты разделены по тематике </li></ul><ul><li>Рейтинг – каждый раздел ранжируется по посещаемости, обновление 1 раз в час </li></ul><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>
  3. 3. Устройство сайты пользователи backend logs pages counter <ul><li>расчет статистики ресурсов </li></ul><ul><li>расчет глобальной статистики (разделы, все сайты) </li></ul><ul><li>формирование рейтингов </li></ul><ul><li>отображение рейтингов и главной страницы </li></ul><ul><li>отображение статистики </li></ul><ul><li>«личный кабинет» пользователя </li></ul><ul><li>отдача счетчиков </li></ul><ul><li>ведение и передача логов </li></ul><ul><li>упаковка логов </li></ul><ul><li>расчет статистики по страницам, реферерам, поисковым запросам </li></ul>
  4. 4. Проблемы <ul><li>Надежность </li></ul><ul><li>Нагрузка на counter </li></ul><ul><li>Слишком много функций у backend </li></ul><ul><li>Нагрузка на pages </li></ul><ul><li>Нагрузка на backend </li></ul>
  5. 5. Прежде всего – мониторинг <ul><li>состояние системы </li></ul><ul><li>влияние изменений </li></ul>
  6. 6. Нагрузка на pages <ul><li>не успевает обработать дневные логи </li></ul><ul><ul><li>статистика ресурсов независима, делим счетчики по диапазонам и разносим по серверам </li></ul></ul>
  7. 7. Нагрузка на pages <ul><li>синхронизация BerkeleyDB на серверах </li></ul><ul><ul><li>scp раз в день </li></ul></ul><ul><ul><li>в течение дня: </li></ul></ul><ul><ul><ul><li>http </li></ul></ul></ul><ul><ul><ul><li>+ надежно </li></ul></ul></ul><ul><ul><ul><li>– надо ждать ответ </li></ul></ul></ul><ul><ul><ul><li>smtp </li></ul></ul></ul><ul><ul><ul><ul><li>+ несколько попыток отправки </li></ul></ul></ul></ul>
  8. 8. Нагрузка на counter <ul><li>весна 2008 года – 12000 хитов в секунду </li></ul><ul><li>настройка сервера +10% производительности </li></ul><ul><li>разделение на несколько серверов </li></ul><ul><ul><li>делим счетчики по диапазонам </li></ul></ul><ul><ul><li>– не надежно при 2х серверах </li></ul></ul><ul><ul><li>– сложно управлять нагрузкой </li></ul></ul><ul><ul><li>– разные hostname: counter1, counter2, … </li></ul></ul><ul><ul><li>+ можно считать статистику online </li></ul></ul><ul><ul><li>запросы балансируются случайным образом </li></ul></ul><ul><ul><li>– нельзя считать статистику online </li></ul></ul><ul><ul><li>+ счетчиков с цифрами всего 3% </li></ul></ul>
  9. 9. Нагрузка на counter: backend <ul><li>обсчет логов нескольких counter </li></ul><ul><ul><li>время - только вперед, т.е. Merge sort по времени </li></ul></ul><ul><li>увеличение нагрузки на backend </li></ul><ul><ul><li>работа только по времени в логе </li></ul></ul><ul><ul><li>+ backend сам знает, что делать и когда </li></ul></ul><ul><ul><li>+ не надо давать команды извне </li></ul></ul><ul><ul><li>+ может отстать от реального времени в течение дня, а ночью догнать </li></ul></ul>
  10. 10. Нагрузка на backend <ul><li>разделение на компоненты </li></ul><ul><ul><li>учетные записи из BerkeleyDB в MySQL </li></ul></ul><ul><ul><li>+ можно добавлять еще сервера </li></ul></ul><ul><ul><li>+ небольшое число обращений (это не статистика!) </li></ul></ul><ul><ul><li>некоторое время 2 базы работали вместе, потом старую отключили </li></ul></ul><ul><ul><li>глобальная статистика – отдельный сервер </li></ul></ul><ul><ul><li>+ устранена причина для разделения backend’a </li></ul></ul><ul><ul><li>веб-интерфейс – отдельно </li></ul></ul><ul><ul><li>+ 90% запросов – главная страница и рейтинги </li></ul></ul>
  11. 11. Нагрузка на backend <ul><li>разделение backend’a на 2 по диапазонам счетчиков </li></ul><ul><ul><li>все локальные базы со статистикой – по диапазонам: </li></ul></ul><ul><ul><li>stat.db -> stat.db.0, stat.db.1, … 10000 счетчиков в каждой </li></ul></ul><ul><ul><li>веб-фронтенд, глобальная статистика – уже отдельно </li></ul></ul><ul><li>формирование рейтингов </li></ul><ul><ul><li>считаем, что backend’ ы работают в реальном времени каждый час – список посещаемости ресурсов </li></ul></ul><ul><ul><li>– не честно, если один backend отстал </li></ul></ul><ul><ul><li>по времени в логе </li></ul></ul><ul><ul><ul><li>– рейтинг готов, когда все обсчитали данный час </li></ul></ul></ul>
  12. 12. Модификация frontend backend db pages сайты пользователи backend logs frontend pages pages db db counter counter counter global
  13. 13. Итого: <ul><li>Надежность – повышена </li></ul><ul><li>Нагрузка на counter – решена </li></ul><ul><li>Слишком много функций у backend – решена </li></ul><ul><li>Нагрузка на pages – решена </li></ul><ul><li>Нагрузка на backend – решена </li></ul>
  14. 14. Что дальше? <ul><li>надежность и восстановление после сбоев </li></ul><ul><li>статистика </li></ul><ul><ul><li>сбор счетчиком новых параметров </li></ul></ul><ul><ul><li>расширение набора отчетов </li></ul></ul><ul><ul><li>аналитика </li></ul></ul><ul><li>интерфейс пользователя </li></ul><ul><li>поиск информации в каталоге </li></ul>
  15. 15. Спасибо за внимание frontend backend db pages сайты пользователи backend logs frontend pages pages db db counter counter counter global

×