'

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

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





Слайд 0

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


Слайд 1

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


Слайд 2

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


Слайд 3

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


Слайд 4

События


Слайд 5

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


Слайд 6


Слайд 7

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


Слайд 8

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


Слайд 9

Что делать?


Слайд 10


Слайд 11

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


Слайд 12

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


Слайд 13

Компоненты PgQ


Слайд 14

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


Слайд 15

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


Слайд 16

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


Слайд 17

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


Слайд 18

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


Слайд 19

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


Слайд 20


Слайд 21

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


Слайд 22

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


Слайд 23

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


Слайд 24

Disk I/O


Слайд 25

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


Слайд 26

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


Слайд 27

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


Слайд 28

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


Слайд 29

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


Слайд 30

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


×

HTML:





Ссылка: