Масштабируемая система
голосования на базе PostgreSQL
PgQ
Сергей Нековаль
«Грамант»
План доклада
• Обзор PgQ
• Как мы используем PgQ
• Pros & Cons
Вступление
Сервис позволяет пользователям бесплатно загружать и
просматривать видео-контент (японский аналог YouTube):
• О...
• Голосуем за видео
• Обновление статистики голосов и показов
• Обновление рейтингов
• Запись истории голосов/показов
Что ...
События
Просмотр 8-9 млн. в сутки
Голосование 25-30 тыс. в сутки
Добавление в избранное 5 тыс. в сутки
Где тут голосование?
В наличии на 2008 год:
• Суммирование голосов с помощью файлов
• Рейтинги обсчитываются раз в день
• БД перегружена, стати...
«Китайский» вариант
Что делать?
Skytools
• Разработка компании Skype
• Open Source
• Репликация: Londiste
• Очереди: PGQ
PgQ to the rescue
• Предоставляет API для работы с очередью
• Хранит данные в “event tables”
• Можно передавать любые данн...
Компоненты PgQ
Ticker
• Ротация таблиц
• Формирование batches
• Контроль доставки batches
• Обработка retry-событий
Consumer
• API для SQL, Python, PHP, Java
• Обрабатывает не события, а пачки
Producer
• SELECT pgq.insert_event(queue, typ...
В чем польза PgQ
• Транзакционность (ничего не пропадает)
• Асинхронность (регулируется нагрузка)
• Consumer логически отд...
Голосование с помощью PGQ
Новый вариант
• Сохраняем структуру БД
• Front-End (PHP) становится producer-ом
• На каждый чих в очередь заносится
событие
• Memcache: ...
Тюнинг очередей
• ticker_max_lag (время)
• ticket_max_count (число)
Система как трубопровод
max_lag = 30 мин.
max_count = 150 000
max_lag = 30 мин.
max_count = 150 000
max_lag = 3 мин.
max_count = 5 000
max_lag = 3...
Disk I/O
Производительность
• Vacuum
• fsync = off
• Asynchronous commit
SET LOCAL synchronous_commit TO OFF;
SELECT pgq.insert_eve...
Асинхронность
• Где подвох?
• Результат часто нужен немедленно
Куда расти?
• Отделение исторических таблиц
• Несколько БД с очередями
• Skytools 3 cooperative consumers
• Предварительно...
Pitfalls
• Нельзя узнать длину очереди!
• Нельзя очистить очередь!
• Текстовый формат событий
• Документация аскетична
htt...
Вопросы?
snekoval@gramant.ru
Бонусный слайд
• Consumer: lag, last_seen
Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль
Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль
Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль
Upcoming SlideShare
Loading in …5
×

Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль

1,702 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,702
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
17
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Не воспринимать как универсальный рецепт!
  • Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль

    1. 1. Масштабируемая система голосования на базе PostgreSQL PgQ Сергей Нековаль «Грамант»
    2. 2. План доклада • Обзор PgQ • Как мы используем PgQ • Pros & Cons
    3. 3. Вступление Сервис позволяет пользователям бесплатно загружать и просматривать видео-контент (японский аналог YouTube): • Основной источник дохода – реклама. • Число показов в сутки – более 20 млн., 5 ТБ трафика • Число зарегистрированных пользователей – более 150 тыс.
    4. 4. • Голосуем за видео • Обновление статистики голосов и показов • Обновление рейтингов • Запись истории голосов/показов Что нужно?
    5. 5. События Просмотр 8-9 млн. в сутки Голосование 25-30 тыс. в сутки Добавление в избранное 5 тыс. в сутки
    6. 6. Где тут голосование?
    7. 7. В наличии на 2008 год: • Суммирование голосов с помощью файлов • Рейтинги обсчитываются раз в день • БД перегружена, статистика запаздывает
    8. 8. «Китайский» вариант
    9. 9. Что делать?
    10. 10. Skytools • Разработка компании Skype • Open Source • Репликация: Londiste • Очереди: PGQ
    11. 11. PgQ to the rescue • Предоставляет API для работы с очередью • Хранит данные в “event tables” • Можно передавать любые данные в событии • Ориентирован на обработку множества событий (batch)
    12. 12. Компоненты PgQ
    13. 13. Ticker • Ротация таблиц • Формирование batches • Контроль доставки batches • Обработка retry-событий
    14. 14. Consumer • API для SQL, Python, PHP, Java • Обрабатывает не события, а пачки Producer • SELECT pgq.insert_event(queue, type, data, …)
    15. 15. В чем польза PgQ • Транзакционность (ничего не пропадает) • Асинхронность (регулируется нагрузка) • Consumer логически отделен от БД • Простота мониторинга (все в БД)
    16. 16. Голосование с помощью PGQ
    17. 17. Новый вариант
    18. 18. • Сохраняем структуру БД • Front-End (PHP) становится producer-ом • На каждый чих в очередь заносится событие • Memcache: статистика + рейтинги
    19. 19. Тюнинг очередей • ticker_max_lag (время) • ticket_max_count (число)
    20. 20. Система как трубопровод
    21. 21. max_lag = 30 мин. max_count = 150 000 max_lag = 30 мин. max_count = 150 000 max_lag = 3 мин. max_count = 5 000 max_lag = 3 мин. max_count = 5 000
    22. 22. Disk I/O
    23. 23. Производительность • Vacuum • fsync = off • Asynchronous commit SET LOCAL synchronous_commit TO OFF; SELECT pgq.insert_event(‘COUNTER’, ‘V’, ‘movie_id=77958023’); COMMIT;
    24. 24. Асинхронность • Где подвох? • Результат часто нужен немедленно
    25. 25. Куда расти? • Отделение исторических таблиц • Несколько БД с очередями • Skytools 3 cooperative consumers • Предварительное суммирование
    26. 26. Pitfalls • Нельзя узнать длину очереди! • Нельзя очистить очередь! • Текстовый формат событий • Документация аскетична http://wiki.postgresql.org/wiki/Skytools
    27. 27. Вопросы? snekoval@gramant.ru
    28. 28. Бонусный слайд • Consumer: lag, last_seen

    ×