SlideShare a Scribd company logo
Как Badoo модерирует 1
миллиард фотографий в год
        Андрей Гоменюк
Badoo – это:
•   Социальная сеть для знакомства с новыми
    людьми

•   В Top-200 Alexa с 2007 года

•   160+ миллионов пользователей

•   3+ миллиона новых фотографий и видео
    ежедневно

•   40+ тысяч запросов к бэкэндам

•   PHP, MySQL, C(++), Linux, nginx, PHP-fpm,
    memcache
Зачем?


•   Хотим видеть только лица в поиске

•   Хотим минимизировать жалобы пользователей
    и запросы полиции

•   Пользователи стесняются загружать свои
    фотографии
Как Badoo модерирует 1 миллиард фотографий в год (Андрей Гоменюк)
Как Badoo модерирует 1 миллиард фотографий в год (Андрей Гоменюк)
Как?
Какая-то железяка
Ан нет...
Немного статистики

•   2 датацентра

•   200+ серверов с фотографиями

•   200+ серверов с пользовательскими данными

•   150+ новых фотографий в пике в секунду, 3+
    миллиона в сутки

•   120+ модераторов онлайн в пике

•   Время модерации фотографии: 1-2 минуты
Требования

•   Скорость модерации: хотим не больше 1
    минуты

•   Качество модерации: хотим не больше 1
    ошибки на 1000 фотографий (99.9%)

•   Стоимость модерации: не хотим делать
    лишнюю работу
Этапы

•   Сортировка: присвоение каждой фотографии
    категории, определяющей её содержание
    (эротика, дети, разное и т.д.) – для всех
    фотографий

•   Кадрирование: выделение лица на фотографии
    – только для фотографий, показываемых в
    поиске

•   Проверка качества: автоматическая + ручная
Схематично
Доставка фото в модерацию
Доставка фото в модерацию


•   У нас шардинг

•   Хотим транзакционность

•   Хотим меньше зависимостей между
    компонентами
Решение


•   Своя очередь сообщений на MySQL

•   Каждому БД серверу - по очереди

•   Все данные сливаются в несколько потоков на
    центральную БД на локальном ДЦ

•   Не нарушается целостность данных
Но у нас два ДЦ


•   Модерация происходит в одном ДЦ

•   Очередь умеет доставлять события между ДЦ

•   После обработки посылаем событие обратно

•   Минус: «американские» фотографии доходят
    медленнее
Решение

•   Появился быстрый канал: можем использовать
    мастер-мастер репликацию

•   Практически нет задержек для «американских»
    фотографий

•   Есть нюансы с запросами

•   Время на доставку события: 20с
Сортировка
Особенности

•   Не хотим каждый раз дёргать информацию о
    каждой фотографии/пользователе

•   Храним все нужные данные для отображения
    фото локально (в модерации)

•   Подписаны на 10+ различных событий об
    удалении пользователя/альбома/фото,
    перемещении, смены приватности и т.д.
Проблема №1

•   Записей больше, чем чтений: нет смысла
    кэшировать

•   Записей очень много: если всё в одной таблице,
    то начинаются тормоза при вставках,
    обновлениях, удалениях

•   Много индексов для разных случаев:
    приоритеты, даты, модераторы, типы, статусы и
    т.д.
Решение



•   Один источник записей - одна таблица

•   Нет проблем со вставками

•   Нет проблем с deadlock’ами
Простой случай
Проблема №2



•   Удалился пользователь/альбом/фото

•   Проблемы с сетью

•   Проблемы с фото-сервером
Решение: пропуски
Проблема №3


•   Разом пришло очень много фотографий

•   Модераторы разом перестали работать

•   Изменились требования и нужно перепроверить
    старые фото
Решение: отложенные
Автоматическая проверка

•   Подготавливаем массив «правильных»
    фотографий

•   Подмешиваем модераторам

•   Сравниваем результат

•   Быстро находим «читеров»

•   Но это не позволяет держать общее качество на
    высоте
Ручная проверка

•   Режим: доверяй, но проверяй

•   На одном экране выводим 50 фотографий с
    одним статусом

•   Группируем фотографии по полу

•   Одним нажатием фотография отправляется
    на повторную модерацию

•   Один модератор проверяет до 10000
    фотографий в час
Ручная проверка
Интерфейс
Интерфейс
•   Простота: ничего лишнего

•   Подсказки от нас: лицо, пол анкеты

•   Решение применяется несколькими кнопками

•   Дополнительная статистика (скорость канала,
    тайминги загрузок и принятия решения,
    автоматический пропуск фотографий, которые
    не смогли загрузить)

•   Чтобы не создавать лишнюю нагрузку на
    сервер, отправляем результаты пачками, но не
    слишком большими
Применение решения
Применение решения

•   После модерации нужен физический доступ к
    фотографии: переместить/удалить/обрезать

•   События о модерации должен обрабатывать тот
    фото-сервер, где находится фотография

•   После получения события о модерации,
    перекладываем его в отдельную очередь на
    применение (с данными о фото-сервере)

•   Время на применение решения: 30с
Общая схема
Доверяй, но измеряй
Что измеряем


•   Скорость доставки событий

•   Скорость модерации

•   Размер каждой очереди

•   Стандартные показатели (Pinba)
Модераторы тоже люди


•   Работают в удобное для себя время (день по
    Москве)

•   Делают то, за что больше платят

•   Если записей мало - ждут, пока накопится и
    проверяют пачкой
Для нас важна скорость
•   Увеличенный тариф за работу в ночное время

•   Очередь кадрирования автоматически
    закрывается, если много фото в сортировке

•   Если модератор не проявляет активности -
    отключаем его

•   Повышенный приоритет для «важных» фото -
    достаются самым активным

•   Средняя скорость принятия решения - 10с для
    приоритетных фото, 30 секунд для обычных
Автоматическая модерация


•   Сложные правила - даже люди иногда путаются

•   Правила могут меняться

•   Низкая скорость анализа

•   В любом случае нужна ручная перепроверка
Знаменитости
•   Пользователи любят загружать чужие фото

•   Модераторы не знают всех знаменитостей...
Мы знаем, но рассказать
   не можем. Пока...
Спасибо!



     Вопросы?

dron@corp.badoo.com

More Related Content

PPTX
Оптимизация производительности нагруженных веб-систем на Java
PPTX
Мониторинг качества работы вашего проекта
PPT
Что делать со своим первым миллиардом (Евгений Поляков, Антон Кортунов)
PPTX
Про построение нагруженных систем
PPT
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
PDF
Алексей Захаров "Архитектура Яндекс.Фоток"
PPT
Architechture of a social network for 30M users
PPTX
презентация
Оптимизация производительности нагруженных веб-систем на Java
Мониторинг качества работы вашего проекта
Что делать со своим первым миллиардом (Евгений Поляков, Антон Кортунов)
Про построение нагруженных систем
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
Алексей Захаров "Архитектура Яндекс.Фоток"
Architechture of a social network for 30M users
презентация

Similar to Как Badoo модерирует 1 миллиард фотографий в год (Андрей Гоменюк) (12)

PPT
Фотострана, Дмитрий Смирнов
PPTX
Современные технологии сайтостроения для решения бизнес-задач
PDF
Евгений Молев, Burbon.ru и Дмитрий Попов, Itees
PPTX
Foteria.ru
PPTX
Разработка сайта для компании Фотобокс
PPTX
Современные технологии сайтостроения для решения бизнес-задач
PPTX
Персонализация сайта февраль 2013
PPT
Запуск интернет-площадки для профессиональных фотографов с системой тендерных...
PPT
татьяна рожкова
PPTX
NoBigData - потоковая система аналитики clientside производительности, Сергей...
PDF
Technopolis.NoSQL 03 Haystack
PDF
Дмитрий Дегтярев, "Хабикаса"
Фотострана, Дмитрий Смирнов
Современные технологии сайтостроения для решения бизнес-задач
Евгений Молев, Burbon.ru и Дмитрий Попов, Itees
Foteria.ru
Разработка сайта для компании Фотобокс
Современные технологии сайтостроения для решения бизнес-задач
Персонализация сайта февраль 2013
Запуск интернет-площадки для профессиональных фотографов с системой тендерных...
татьяна рожкова
NoBigData - потоковая система аналитики clientside производительности, Сергей...
Technopolis.NoSQL 03 Haystack
Дмитрий Дегтярев, "Хабикаса"
Ad

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Ad

Как Badoo модерирует 1 миллиард фотографий в год (Андрей Гоменюк)

  • 1. Как Badoo модерирует 1 миллиард фотографий в год Андрей Гоменюк
  • 2. Badoo – это: • Социальная сеть для знакомства с новыми людьми • В Top-200 Alexa с 2007 года • 160+ миллионов пользователей • 3+ миллиона новых фотографий и видео ежедневно • 40+ тысяч запросов к бэкэндам • PHP, MySQL, C(++), Linux, nginx, PHP-fpm, memcache
  • 3. Зачем? • Хотим видеть только лица в поиске • Хотим минимизировать жалобы пользователей и запросы полиции • Пользователи стесняются загружать свои фотографии
  • 9. Немного статистики • 2 датацентра • 200+ серверов с фотографиями • 200+ серверов с пользовательскими данными • 150+ новых фотографий в пике в секунду, 3+ миллиона в сутки • 120+ модераторов онлайн в пике • Время модерации фотографии: 1-2 минуты
  • 10. Требования • Скорость модерации: хотим не больше 1 минуты • Качество модерации: хотим не больше 1 ошибки на 1000 фотографий (99.9%) • Стоимость модерации: не хотим делать лишнюю работу
  • 11. Этапы • Сортировка: присвоение каждой фотографии категории, определяющей её содержание (эротика, дети, разное и т.д.) – для всех фотографий • Кадрирование: выделение лица на фотографии – только для фотографий, показываемых в поиске • Проверка качества: автоматическая + ручная
  • 13. Доставка фото в модерацию
  • 14. Доставка фото в модерацию • У нас шардинг • Хотим транзакционность • Хотим меньше зависимостей между компонентами
  • 15. Решение • Своя очередь сообщений на MySQL • Каждому БД серверу - по очереди • Все данные сливаются в несколько потоков на центральную БД на локальном ДЦ • Не нарушается целостность данных
  • 16. Но у нас два ДЦ • Модерация происходит в одном ДЦ • Очередь умеет доставлять события между ДЦ • После обработки посылаем событие обратно • Минус: «американские» фотографии доходят медленнее
  • 17. Решение • Появился быстрый канал: можем использовать мастер-мастер репликацию • Практически нет задержек для «американских» фотографий • Есть нюансы с запросами • Время на доставку события: 20с
  • 19. Особенности • Не хотим каждый раз дёргать информацию о каждой фотографии/пользователе • Храним все нужные данные для отображения фото локально (в модерации) • Подписаны на 10+ различных событий об удалении пользователя/альбома/фото, перемещении, смены приватности и т.д.
  • 20. Проблема №1 • Записей больше, чем чтений: нет смысла кэшировать • Записей очень много: если всё в одной таблице, то начинаются тормоза при вставках, обновлениях, удалениях • Много индексов для разных случаев: приоритеты, даты, модераторы, типы, статусы и т.д.
  • 21. Решение • Один источник записей - одна таблица • Нет проблем со вставками • Нет проблем с deadlock’ами
  • 23. Проблема №2 • Удалился пользователь/альбом/фото • Проблемы с сетью • Проблемы с фото-сервером
  • 25. Проблема №3 • Разом пришло очень много фотографий • Модераторы разом перестали работать • Изменились требования и нужно перепроверить старые фото
  • 27. Автоматическая проверка • Подготавливаем массив «правильных» фотографий • Подмешиваем модераторам • Сравниваем результат • Быстро находим «читеров» • Но это не позволяет держать общее качество на высоте
  • 28. Ручная проверка • Режим: доверяй, но проверяй • На одном экране выводим 50 фотографий с одним статусом • Группируем фотографии по полу • Одним нажатием фотография отправляется на повторную модерацию • Один модератор проверяет до 10000 фотографий в час
  • 31. Интерфейс • Простота: ничего лишнего • Подсказки от нас: лицо, пол анкеты • Решение применяется несколькими кнопками • Дополнительная статистика (скорость канала, тайминги загрузок и принятия решения, автоматический пропуск фотографий, которые не смогли загрузить) • Чтобы не создавать лишнюю нагрузку на сервер, отправляем результаты пачками, но не слишком большими
  • 33. Применение решения • После модерации нужен физический доступ к фотографии: переместить/удалить/обрезать • События о модерации должен обрабатывать тот фото-сервер, где находится фотография • После получения события о модерации, перекладываем его в отдельную очередь на применение (с данными о фото-сервере) • Время на применение решения: 30с
  • 36. Что измеряем • Скорость доставки событий • Скорость модерации • Размер каждой очереди • Стандартные показатели (Pinba)
  • 37. Модераторы тоже люди • Работают в удобное для себя время (день по Москве) • Делают то, за что больше платят • Если записей мало - ждут, пока накопится и проверяют пачкой
  • 38. Для нас важна скорость • Увеличенный тариф за работу в ночное время • Очередь кадрирования автоматически закрывается, если много фото в сортировке • Если модератор не проявляет активности - отключаем его • Повышенный приоритет для «важных» фото - достаются самым активным • Средняя скорость принятия решения - 10с для приоритетных фото, 30 секунд для обычных
  • 39. Автоматическая модерация • Сложные правила - даже люди иногда путаются • Правила могут меняться • Низкая скорость анализа • В любом случае нужна ручная перепроверка
  • 40. Знаменитости • Пользователи любят загружать чужие фото • Модераторы не знают всех знаменитостей...
  • 41. Мы знаем, но рассказать не можем. Пока...
  • 42. Спасибо! Вопросы? dron@corp.badoo.com