Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль
- 3. Вступление
Сервис позволяет пользователям бесплатно загружать и
просматривать видео-контент (японский аналог YouTube):
• Основной источник дохода – реклама.
• Число показов в сутки – более 20 млн., 5 ТБ трафика
• Число зарегистрированных пользователей – более 150 тыс.
- 4. • Голосуем за видео
• Обновление статистики голосов и показов
• Обновление рейтингов
• Запись истории голосов/показов
Что нужно?
- 8. В наличии на 2008 год:
• Суммирование голосов с помощью файлов
• Рейтинги обсчитываются раз в день
• БД перегружена, статистика запаздывает
- 13. PgQ to the rescue
• Предоставляет API для работы с очередью
• Хранит данные в “event tables”
• Можно передавать любые данные в
событии
• Ориентирован на обработку множества
событий (batch)
- 16. Consumer
• API для SQL, Python, PHP, Java
• Обрабатывает не события, а пачки
Producer
• SELECT pgq.insert_event(queue, type, data, …)
- 17. В чем польза PgQ
• Транзакционность (ничего не пропадает)
• Асинхронность (регулируется нагрузка)
• Consumer логически отделен от БД
• Простота мониторинга (все в БД)
- 20. • Сохраняем структуру БД
• Front-End (PHP) становится producer-ом
• На каждый чих в очередь заносится
событие
• Memcache: статистика + рейтинги
- 24. 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
- 28. Куда расти?
• Отделение исторических таблиц
• Несколько БД с очередями
• Skytools 3 cooperative consumers
• Предварительное суммирование
- 29. Pitfalls
• Нельзя узнать длину очереди!
• Нельзя очистить очередь!
• Текстовый формат событий
• Документация аскетична
http://wiki.postgresql.org/wiki/Skytools
Editor's Notes
- Не воспринимать как универсальный рецепт!