Масштабируемая система голосования на базе PostgreSQL PgQ
План доклада
Вступление
Что нужно?
События
Где тут голосование?
В наличии на 2008 год:
«Китайский» вариант
Что делать?
Skytools
PgQ to the rescue
Компоненты PgQ
Ticker
Consumer
В чем польза PgQ
Голосование с помощью PGQ
Новый вариант
Тюнинг очередей
Система как трубопровод
Disk I/O
Производительность
Асинхронность
Куда расти?
Pitfalls
Вопросы?
0.98M
Category: internetinternet

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

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

Сергей Нековаль
«Грамант»

2. План доклада

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

3. Вступление

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

4. Что нужно?

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

5. События

Просмотр
8-9 млн. в сутки
Голосование
25-30 тыс. в сутки
Добавление в избранное
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. Вопросы?

[email protected]

31.

Бонусный слайд
• Consumer: lag, last_seen
English     Русский Rules