Масштабируемая система голосования на базе postgresql. pgq...
TRANSCRIPT
![Page 1: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/1.jpg)
Масштабируемая система голосования на базе PostgreSQL
PgQ
Сергей Нековаль«Грамант»
![Page 2: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/2.jpg)
План доклада• Обзор PgQ• Как мы используем PgQ• Pros & Cons
![Page 3: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/3.jpg)
ВступлениеСервис позволяет пользователям бесплатно загружать и просматривать видео-контент (японский аналог YouTube):• Основной источник дохода – реклама.
• Число показов в сутки – более 20 млн., 5 ТБ трафика• Число зарегистрированных пользователей – более 150 тыс.
![Page 4: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/4.jpg)
• Голосуем за видео• Обновление статистики голосов и показов• Обновление рейтингов• Запись истории голосов/показов
Что нужно?
![Page 5: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/5.jpg)
События
Просмотр 8-9 млн. в сутки
Голосование 25-30 тыс. в сутки
Добавление в избранное 5 тыс. в сутки
![Page 6: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/6.jpg)
Где тут голосование?
![Page 7: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/7.jpg)
![Page 8: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/8.jpg)
В наличии на 2008 год:• Суммирование голосов с помощью файлов• Рейтинги обсчитываются раз в день• БД перегружена, статистика запаздывает
![Page 9: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/9.jpg)
«Китайский» вариант
![Page 10: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/10.jpg)
Что делать?
![Page 11: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/11.jpg)
![Page 12: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/12.jpg)
Skytools• Разработка компании Skype• Open Source• Репликация: Londiste• Очереди: PGQ
![Page 13: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/13.jpg)
PgQ to the rescue• Предоставляет API для работы с очередью• Хранит данные в “event tables”• Можно передавать любые данные в событии• Ориентирован на обработку множества
событий (batch)
![Page 14: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/14.jpg)
Компоненты PgQ
![Page 15: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/15.jpg)
Ticker• Ротация таблиц• Формирование batches• Контроль доставки batches• Обработка retry-событий
![Page 16: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/16.jpg)
Consumer• API для SQL, Python, PHP, Java• Обрабатывает не события, а пачки
Producer• SELECT pgq.insert_event(queue, type, data, …)
![Page 17: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/17.jpg)
В чем польза PgQ• Транзакционность (ничего не пропадает)• Асинхронность (регулируется нагрузка)• Consumer логически отделен от БД• Простота мониторинга (все в БД)
![Page 18: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/18.jpg)
Голосование с помощью PGQ
![Page 19: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/19.jpg)
Новый вариант
![Page 20: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/20.jpg)
• Сохраняем структуру БД• Front-End (PHP) становится producer-ом• На каждый чих в очередь заносится
событие• Memcache: статистика + рейтинги
![Page 21: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/21.jpg)
![Page 22: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/22.jpg)
Тюнинг очередей• ticker_max_lag (время)• ticket_max_count (число)
![Page 23: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/23.jpg)
Система как трубопровод
![Page 24: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/24.jpg)
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 (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/25.jpg)
Disk I/O
![Page 26: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/26.jpg)
Производительность• 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 (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/27.jpg)
Асинхронность• Где подвох?• Результат часто нужен немедленно
![Page 28: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/28.jpg)
Куда расти?• Отделение исторических таблиц• Несколько БД с очередями• Skytools 3 cooperative consumers• Предварительное суммирование
![Page 29: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/29.jpg)
Pitfalls• Нельзя узнать длину очереди!• Нельзя очистить очередь!• Текстовый формат событий• Документация аскетична
http://wiki.postgresql.org/wiki/Skytools
![Page 31: Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)](https://reader035.vdocuments.site/reader035/viewer/2022062300/557768bbd8b42a472c8b4ed0/html5/thumbnails/31.jpg)
Бонусный слайд• Consumer: lag, last_seen