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

More Related Content

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

Editor's Notes

  1. Не воспринимать как универсальный рецепт!