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

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

Dec 14, 2014

Download

Technology

Fuenteovejuna

 
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