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