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

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

Embed Size (px)

DESCRIPTION

 

Citation preview

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

Масштабируемая система голосования на базе PostgreSQL

PgQ

Сергей Нековаль«Грамант»

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

План доклада• Обзор PgQ• Как мы используем PgQ• Pros & Cons

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

ВступлениеСервис позволяет пользователям бесплатно загружать и просматривать видео-контент (японский аналог YouTube):• Основной источник дохода – реклама.

• Число показов в сутки – более 20 млн., 5 ТБ трафика• Число зарегистрированных пользователей – более 150 тыс.

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

• Голосуем за видео• Обновление статистики голосов и показов• Обновление рейтингов• Запись истории голосов/показов

Что нужно?

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

События

Просмотр 8-9 млн. в сутки

Голосование 25-30 тыс. в сутки

Добавление в избранное 5 тыс. в сутки

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

Где тут голосование?

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

В наличии на 2008 год:• Суммирование голосов с помощью файлов• Рейтинги обсчитываются раз в день• БД перегружена, статистика запаздывает

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

«Китайский» вариант

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

Что делать?

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

Skytools• Разработка компании Skype• Open Source• Репликация: Londiste• Очереди: PGQ

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

PgQ to the rescue• Предоставляет API для работы с очередью• Хранит данные в “event tables”• Можно передавать любые данные в событии• Ориентирован на обработку множества

событий (batch)

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

Компоненты PgQ

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

Ticker• Ротация таблиц• Формирование batches• Контроль доставки batches• Обработка retry-событий

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

Consumer• API для SQL, Python, PHP, Java• Обрабатывает не события, а пачки

Producer• SELECT pgq.insert_event(queue, type, data, …)

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

В чем польза PgQ• Транзакционность (ничего не пропадает)• Асинхронность (регулируется нагрузка)• Consumer логически отделен от БД• Простота мониторинга (все в БД)

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

Голосование с помощью PGQ

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

Новый вариант

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

• Сохраняем структуру БД• Front-End (PHP) становится producer-ом• На каждый чих в очередь заносится

событие• Memcache: статистика + рейтинги

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

Тюнинг очередей• ticker_max_lag (время)• ticket_max_count (число)

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

Система как трубопровод

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

max_lag = 30 мин.max_count = 150 000max_lag = 30 мин.max_count = 150 000

max_lag = 3 мин.max_count = 5 000max_lag = 3 мин.max_count = 5 000

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

Disk I/O

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

Производительность• Vacuum• fsync = off• Asynchronous commit

SET LOCAL synchronous_commit TO OFF;

SELECT pgq.insert_event(‘COUNTER’, ‘V’, ‘movie_id=77958023’);

COMMIT;

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

Асинхронность• Где подвох?• Результат часто нужен немедленно

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

Куда расти?• Отделение исторических таблиц• Несколько БД с очередями• Skytools 3 cooperative consumers• Предварительное суммирование

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

Pitfalls• Нельзя узнать длину очереди!• Нельзя очистить очередь!• Текстовый формат событий• Документация аскетична

http://wiki.postgresql.org/wiki/Skytools

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

Вопросы?

[email protected]

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

Бонусный слайд• Consumer: lag, last_seen