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

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

Jun 10, 2015

Download

Documents

Ontico
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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