Толока: как тысячи людей помогают нам делать Яндекс

Краткая версия доклада:

Толокá – древний обычай сбора общины для выполнения общего дела и оказания помощи, что очень близко к идее краудсорсинга. Толока, как и другие краудсорсинговые платформы, работает по принципу соединения заказчиков и исполнителей. Заказчики загружают в платформу задания и обеспечивают под них бюджет, а исполнители, зарабатывают деньги, выполняя задание и отправляя результат. Платформа обеспечивает процессинг платежей и является площадкой общения и разрешения споров между заказчиками и исполнителями. Ежедневно десятки тысяч людей выполняют задания в краудсорсинговой платформе Толока: оценивают релевантность сайтов, классифицируют изображения, отмечают объекты на фотографиях. Решая эти и многие другие задачи, они помогают всем без исключения сервисам Яндексу улучшать существующие и создавать новые алгоритмы, а также поддерживать актуальность данных.

Толока доступна в нескольких формах – через браузер на сайте toloka.yandex.ru, кроме того, существует мобильное приложение под iOS и Android, которое незаменимо при выполнении заданий на местности или при использовании тех или иных устройств телефона.

Бэкенд Толоки разработан на Java, также активно применяется Spring Boot и его составляющие. Мы используем разные хранилища, основное – на PostgreSQL (с использованием денежных транзакций), а также mongoDB и разработанная в Яндексе платформа YT.

При разработке Толоки нам приходится решать множество задач. В частности, по такому направлению, как бизнес-логика, самое важное – выбор заданий, которые пользователи видят на главной странице платформы после регистрации. Заказчики формируют пулы заданий, доступных определенному количеству исполнителей, которые выбирают из очереди интересные им задания. Получение списка доступных заданий пользователем происходит через поиск пулов, доступных ему по фильтру, а также после проверки фактов отстранения от прошлых заданий или блокировки. Участнику оставляются те задания, где данному пользователю хватает заданий, чтобы сформировать страницу, ни группируются по проекту, цене и описанию, после чего поступают на фронтенд.

Заказчики могут фильтровать исполнителей по различным срезам – использованию операционной системы, географическому расположению (на основе IP-адреса), данным из профиля (пол, возраст, образование), а также навыку (характеристика качества выполнения задачи).

После захода пользователя на страницу Толоки его представление на JSON соотносится с фильтром и выводится в пулы заданий. Очереди динамически создаются, удаляются и дополняются заданиями. Кроме того, каждое задание может быть сделано многими исполнителями, при этом для исполнителя задания повторяться не должны. На получение списка доступных заданий поступает 150 обращений в секунду, делается 40 тыс. проверок в секунду на наличие доступных заданий в очереди. Для решения такой задачи все проверки были перенесены в базу данных.

После того, как исполнитель выбрал задание и нажал кнопку «Приступить», вновь проходит проверка доступности пула заданий, затем идет поиск готовой страницы задания или подготавливается новая страница из нескольких источников, и, наконец, со счёта заказчика резервируются деньги на выполнение задания. Основной задачей платформы в данном случае состоит в исключении возможности дублирования заданий.

Ранее все запросы в Толоку шли через единый пул соединений, однако нагрузка быстро росла и все предпринимаемые оптимизации с ней не справлялись. В итоге было принято решение читать с реплик путем выявления ReadOnly транзакций и был разработан механизм чтения replicationBarrier. В настоящее время база проекта занимает 2 ТБ, ест мастер плюс три реплики, на каждом сервере 32 ядра. На мастере выполняется порядка 1,5 тыс. запросов в секунду и 10 тыс. запросов – на каждой из реплик.

В краудсорсинге остро стоит проблема качества данных, в Толоке контроль за ним осуществляется несколькими методами, в том числе с помощью Captcha, эвристик по скорости выполнения заданий и ответам, ханипотов – заданий, ответ на который уже известен, и с помощью которых выявляются ошибки или попытки смошенничать. Также для выявления недобросовестных исполнителей используется метод перекрытий по заданиям и согласованности ответов.

В Толоке часто одну задачу делают несколько исполнителей и, соответственно, возникает необходимость агрегации ответов, для чего применяются разные методы – от простого перевеса большинства до сложных вероятностных моделей. Для каждого проекта в отдельности можно выбрать модель, использование которой даст до 15 п.п. к качеству выполнения.