Upload
ontico
View
3.506
Download
14
Embed Size (px)
DESCRIPTION
Citation preview
Как Badoo модерирует 1 миллиард фотографий в год
Андрей Гоменюк
Badoo – это:• Социальная сеть для знакомства с новыми людьми
• В Top-200 Alexa с 2007 года
• 160+ миллионов пользователей
• 3+ миллиона новых фотографий и видео ежедневно
• 40+ тысяч запросов к бэкэндам
• PHP, MySQL, C(++), Linux, nginx, PHP-fpm, memcache
Зачем?
• Хотим видеть только лица в поиске
• Хотим минимизировать жалобы пользователей и запросы полиции
• Пользователи стесняются загружать свои фотографии
Как?
Какая-то железяка
Ан нет...
Немного статистики
• 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 секунд для обычных
Автоматическая модерация
• Сложные правила - даже люди иногда путаются
• Правила могут меняться
• Низкая скорость анализа
• В любом случае нужна ручная перепроверка
Знаменитости
• Пользователи любят загружать чужие фото
• Модераторы не знают всех знаменитостей...
Мы знаем, но рассказать не можем. Пока...