Как стать автором
Обновить

Как устроен Relap.io — сервис, который выдает 30 миллиардов рекомендаций в месяц

Время на прочтение4 мин
Количество просмотров35K
Всего голосов 30: ↑24 и ↓6+18
Комментарии40

Комментарии 40

Здесь всё на самом деле стандартно, интересно как раз как и на основе чего формируются рекомендации и насколько они лучше обычной выдачи последних материалов, например
А что больше интересует техническая сторона вопроса, как обсчитывать тысячи хитов в секунду и не загнуться или какая математика лежит в основе?
Про математику :)
Рекомендации формируются персонально для каждого пользователя или на страницу?
Помножьте количество страниц на количество пользователей. Так жить невозможно. Генерировать рекомендации в таких объёмах на лету — тоже.
Но для каждого пользователя есть минимальная кастомизация — учитываются уже просмотренные статьи, например. Планируем продолжать такую аккуратную кастомизацию, которую ненакладно делать прямо в процессе выдачи рекомендаций.
Как минимум у Hetzner узкий канал между стойками, да и в интернет не фонтан. Нам нужно больше гигабита и там и там :) Так что когда выросли из стойки — стали искать, куда переехать.
*Тут должна быть картинка про то как рисовать сову*
Начало было хорошее, а потом все скатилось непонятно куда. Не думаю, что людям на хабре надо объяснять почему shared-хостинг не подходит для подобных проектов. Да и без сравнения PostgreSQL/MySQL и Nginx/Apache тоже можно было обойтись.(тем более без упоминания реальных юзкейсов, в духе «нам надо было хранить json и PostgreSQL нам подошел лучше» (с) ).
Надеюсь в следующих статьях объем будет побольше и поинтереснее, т.к. куча вопросов по поводу Вашей архитектуры:
1. Почему Perl?
2. Почему Redis для очередей?
3. Про то как Spark используете.
  1. Выбор Perl обусловлен тем, что у нас уже была сильная команда перловиков. На самом деле, конечно, можно использовать любой популярный для веб-разработки язык (даже PHP).
  2. В своё время для Surfingbird переписали Resque от твиттера на перл. Нам понравилось — работает хорошо, проблем нет. На новый проект взяли то же самое.
НЛО прилетело и опубликовало эту надпись здесь
Не воспринимайте так серьезно эту шутку)
Я слежу за трендами всей индустрии, и про развитие PHP в курсе :)
Что нужно, чтобы подключиться к Вам через jsonp api ?
Для начала объяснить, зачем :) Стараемся обходиться виджетами. И оказаться сайтом с высокой посещаемостью.
Ну как минимум потому, что виджеты не совсем вписываются в дизайн :) Они конечно настраиваемые, но пока недостаточно.
Высокая для Вас — это от скольки в сутки?
При посещаемости от 20к уников в сутки мы сделаем вам ваш собственный дизайн, и это тоже бесплатно.
Ну вот сейчас JSONP стоит на Adme и Coub-е ;)
А если 19900 в пиковый день недели договоримся? :)
давайте попробуем. пишите в личку
Что нужно, чтобы подключиться к Вам через jsonp api ?

тоже интерисует этот вопрос, с кем связываться? чтобы получить стоимость этой услуги?

Вы можете давать рекомендации только по сайту в целом "Популярное сейчас..." или также можете давать рекомендации по каждой странице "Похожие статьи ...." ?
Это бесплатно, как и весь наш сервис. Рекомендации у каждой страницы свои.
Как построена монетизация? :)
Площадки, разместившие наш виджет, при желании могут согласиться размещать в виджете помимо рекомендаций рекламу. Доходы от рекламы делятся между нами и площадкой, по умолчанию — пополам.
Мы ну вообще бесплатны и зарабатываем, только помогая зарабатывать другим :)
Ещё вопрос назрел. У вас почти в чистом виде content based recommendation, за исключением учета прочитанных юзером. А как — в двух словах — вы тогда строите рекомендации? По ключевым словам плюс времени публикации, как-то так?
Алгоритмов много. Вплоть до того, что для каких-то сайтов могут быть модификации специально для них.
Вместе это работает примерно как на surfingbird — алгоритмы выстроены в цепочку, пытаемся взять из одного, не нашли достаточно — идём в следующий.
Основной — на самом деле item to item.
Как реализовано исключение прочтенного юзером из рекомендаций? Где вы храните прочтенные юзером ссылки и в какой момент это условие срабатывает? И как вообще работает отслеживание уника, если отключен прием third party cookies?
Пока что — в куках, и, соответственно, без них никак не работает.
Выводится. item to item же основной алгоритм, я писал выше.
Это понятно, но ведь в случае item-item все равно нужна матрица user/item? Ведь нужно понять, что еще читали юзеры, которые читали эту страницу. А в случае если кука на домен сервиса не будет отправляться, по юзерам просмотры не сгруппировать?
Кука не будет отправляться у меньшинства, так что корреляцию между item-ами посчитать всё равно получится.
Показать посчитанную корреляцию можно кому угодно, хоть у него кук вообще нет.
Я ответил на ваш вопрос?
Спасибо за ответы, я не подумал что большинство в данном случае спасает ситуацию.
Поясню насчет отслеживания уника. Для создания матрицы item-user, где элемент это условно время, которое он провел на странице item, нужно идентифицировать уникального юзера, как вы это делаете с учетом third party cookies? По IP?
Почитал на сайте «Мы собираем для каждого пользователя материалы на основе его поведения. На виджет Relap, кликают в 2 раза чаще, чем на блоки, собранные вручную.» Видимо, я не так понял коменты к этому посту :)
Откровенно говоря, подозрительно выглядит позиция "Если хотите, то запускайте рекламу, а если не хотите рекламу — то пользуйтесь бесплатно". Это наводит на мысли, что вы можете использовать собранную информацию еще как-то в своих целях.

Честно слово, если бы вы предлагали схему с выбором между бесплатным использованием с рекламой или платным использованием без рекламы, то было бы больше доверия :)

В любом случае, у вас очень крутая идея!
Собирать информацию нам так и так нужно, чтобы делать рекомендации. Поэтому чисто логически, непонятно, почему описанная вами схема добавила бы доверия.
Сейчас — у идеи попробовать нас нет минусов, а если наш виджет в итоге нравится, то ещё и заработать на нём тоже нет резона отказываться. Сплошная вигода.
НЛО прилетело и опубликовало эту надпись здесь
нет, все ок, весь день все штатно
Вы не просчитывали AWS? Издержки получаются значительно выше?
Кстати, забавная статистика по нашему проекту, где стоят рекомендации Relap. Внезапно заметили, что CTR резко упал (вдвое), при этом среднее количество кликов осталось неизменным. С чем это может быть связано?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий