'

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

Понравилась презентация – покажи это...





Слайд 1

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


Слайд 2

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


Слайд 3

Вступление Сервис позволяет пользователям бесплатно загружать и просматривать видео-контент (японский аналог YouTube): Основной источник дохода – реклама. Число показов в сутки – более 20 млн., 5 ТБ трафика Число зарегистрированных пользователей – более 150 тыс.


Слайд 4

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


Слайд 5

События


Слайд 6

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


Слайд 7


Слайд 8

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


Слайд 9

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


Слайд 10

Что делать?


Слайд 11


Слайд 12

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


Слайд 13

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


Слайд 14

Компоненты PgQ


Слайд 15

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


Слайд 16

Consumer API для SQL, Python, PHP, Java Обрабатывает не события, а пачки Producer SELECT pgq.insert_event(queue, type, data, …)


Слайд 17

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


Слайд 18

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


Слайд 19

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


Слайд 20

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


Слайд 21


Слайд 22

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


Слайд 23

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


Слайд 24

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


Слайд 25

Disk I/O


Слайд 26

Производительность Vacuum fsync = off Asynchronous commit SET LOCAL synchronous_commit TO OFF; SELECT pgq.insert_event(‘COUNTER’, ‘V’, ‘movie_id=77958023’); COMMIT;


Слайд 27

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


Слайд 28

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


Слайд 29

Pitfalls Нельзя узнать длину очереди! Нельзя очистить очередь! Текстовый формат событий Документация аскетична http://wiki.postgresql.org/wiki/Skytools


Слайд 30

Вопросы? snekoval@gramant.ru


Слайд 31

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


×

HTML:





Ссылка: