Вот gif нашего интерактивного рекомендателя в действии:

Вы можете попробовать наш рекомендатель вживую здесь. Первоначально наши рекомендации загружаются на основе одного продукта и нашей собственной модели Skafos Weighted Similarity™. Однако на этом все не заканчивается. Когда вы взаимодействуете — голосуете за (нажмите Больше лайков) или против (нажмите Не в моем стиле), теперь у нас есть и ваш первоначальный продукт, и ваше взаимодействие. Следующий продукт или продукты, которые загружаются, загружаются на основе комбинации всех ваших действий вместе.

И когда вы щелкаете, вы можете видеть, что мы загружаем рекомендации за миллисекунды. Наше время взаимодействия для магазина среднего размера (~ 10 000 товаров) составляет менее 300 мс. Первая метка времени — это когда мы отправили детали взаимодействия на наш сервер. Второй — когда мы получили ответ.

Даже для крупного магазина с более чем 35 000 товаров наше время отклика меньше секунды (669 мс для этого примера):

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

Чтобы это произошло, мы сделали несколько архитектурных решений. Первый простой выбор — использовать WebSockets вместо HTTP-запросов. Более крупная часть — это наша архитектура микросервисов. Наш сервер состоит из более чем 40 микросервисов. Вот отредактированная версия, показывающая сложность нашего секретного соуса:

Каждое поле представляет собой микросервис. Каждый из них маленький, быстрый и масштабируемый. Службы в верхней части диаграммы предназначены для обеспечения поиска. Мы храним данные о продуктах в Redis, а наши модели — в памяти, чтобы поиск выполнялся молниеносно. Для микросервиса, отвечающего за результаты поиска и данные, мы выставляем уникальный экземпляр для каждого клиента. Это изолирует данные, сокращает пространство поиска и обеспечивает гораздо более быстрое получение результатов.

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

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