Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемfuenteovehuna
1 Масштабируемая система голосования на базе PostgreSQL PgQ Сергей Нековаль «Грамант»
2 План доклада Обзор PgQ Как мы используем PgQ Pros & Cons
3 Вступление Сервис позволяет пользователям бесплатно загружать и просматривать видео-контент (японский аналог YouTube): Основной источник дохода – реклама. Число показов в сутки – более 20 млн., 5 ТБ трафика Число зарегистрированных пользователей – более 150 тыс.
4 Голосуем за видео Обновление статистики голосов и показов Обновление рейтингов Запись истории голосов/показов Что нужно?
5 События Просмотр 8-9 млн. в сутки Голосование25-30 тыс. в сутки Добавление в избранное5 тыс. в сутки
6 Где тут голосование?
8 В наличии на 2008 год: Суммирование голосов с помощью файлов Рейтинги обсчитываются раз в день БД перегружена, статистика запаздывает
9 «Китайский» вариант
10 Что делать?
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: статистика + рейтинги
22 Тюнинг очередей ticker_max_lag (время) ticket_max_count (число)
23 Система как трубопровод
24 max_lag = 30 мин. max_count = max_lag = 30 мин. max_count = max_lag = 3 мин. max_count = 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= ); COMMIT;
27 Асинхронность Где подвох? Результат часто нужен немедленно
28 Куда расти? Отделение исторических таблиц Несколько БД с очередями Skytools 3 cooperative consumers Предварительное суммирование
29 Pitfalls Нельзя узнать длину очереди! Нельзя очистить очередь! Текстовый формат событий Документация аскетична
30 Вопросы?
31 Бонусный слайд Consumer: lag, last_seen
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.