Как устроена реклама ВКонтакте
Публикуем ещё один лонгрид с прошедшего митапа VK Tech Talks в Новосибирске. Разработчик Илья Пеняев рассказывает о том, как устроена реклама «ВКонтакте».
Короткое вступление
«ВКонтакте» — это очень большой проект. Его ежемесячная аудитория составляет 100 миллионов пользователей. Соцсеть посещают через web, мобильную версию (m.vk.com) и api (как с официальных клиентов, так и через сторонние).
С чего всё начиналось?
Как и все большие проекты, «ВКонтакте» требует затрат. И появилась необходимость в монетизации.
Первоначально подарки были бесплатными. Но со временем пользователи захотели отличаться от друг друга, и были те, кто был готов покупать платные подарки. Подарки являются первой монетизацией соцсети, и они приносили достаточно денег для поддержания проекта.
Позже была запущена платформа для разработчиков. Появилось большое количество приложений, в том числе и игр. И была введена возможность заработка для разработчиков: пользователи за реальные деньги покупали виртуальную валюту (голоса), платили голосами за какие-то «плюшки» в игре, разработчики получали голоса и выводили их как реальную валюту. Заработок заключался в том, что пользователи покупали 1 голос за 7 рублей, а разработчики выводили 1 голос за 3,5 рубля.
Ну и конечно же стикеры:
Реклама ВКонтакте
Основным способом монетизации является реклама «ВКонтакте». Вначале была введена таргетированная реклама в виде текстово-графического блока (ТГБ) под левым меню.
Со временем запускались другие форматы рекламы — какие-то из них работали хорошо, а какие-то не очень. В конечном счёте наиболее востребованным и актуальным рекламным форматом являются промопосты (рекламные записи в новостной ленте).
Во всём рекламном процессе есть 3 участника:
- пользователи, для которых стараются показать наиболее подходящую качественную рекламу,
- рекламодатели,
- «ВКонтакте».
Десятки миллионов объявлений создано за время запуска рекламной платформы. Запущены сотни тысяч объявлений. Десятки тысяч показов происходят в секунду. В сутки с рекламы поступают десятки миллионов рублей.
Как это работает
Пользователь приходит с запросов в VK, попадает на сервер, на котором работает kPHP. kPHP — это PHP-код, который был транслирован в плюсовый код, затем скомпилирован, был получен большой бинарник, который был деплоен на сервера. Каждый из этих серверов может обращаться к движкам (например, lists, memcached, targ). На каждом сервере есть rpc-proxy.
Также все backends разделены по их сути того, что они делают. Если один из backend сломается, то это не повлияет на работу других.
Также есть frontend, которые представляют собой отдельные сервера, раздающие статику.
Так примерно выглядит работа «ВКонтакте» внутри.
«Снаружи» у рекламодателя есть специальный рекламный интерфейс, где он может создать пост, наполнить его контентом и задать настройки таргетирования.
Рекламный интерфейс написан на JS. Когда был написан данный код, там была реализована концепция, похожая на реактивное программирование, задолго до появления React.
Рекламное объявление с точки зрения кода выглядит так:
Почему MySQL? Так сложилось исторически. Работает — лучше не трогать.
После того, как объявление создано, оно проходит модерацию. Модерация является очень важным этапом. Она служит фактически фильтром между рекламодателем и пользователем. Она нужна для того, чтобы отсеивать некачественную рекламу. Каждое объявление просматривает модератор, часть работы автоматизировано с помощью умного бота.
После одобрения объявления его можно запускать, то есть показать его при удачном стечении обстоятельств пользователю.
Узкоспециализированный рекламный движок targ знает всё про всех пользователей (например, возраст, пол, место жительства). Он находит пользователей под заданные критерии. Для каждого пользователя свой набор объявлений.
Как выглядит показ рекламы:
Для того, чтобы выбрать, какое именно объявление показать пользователю, применяется ранжирование по ожидаемой прибыли: берётся каждое объявление и оценивается, сколько прибыли оно принесёт за показ в данный момент, после этого выбирается из всех объявлений самое дорогое.
Но есть нюанс. Есть понятия CPM (оплата за показы), CRC (оплата за клики), CTR (отношение числа кликов к числу показов). Сложность заключается в том, что невозможно сравнивать CPM с CRC, так как они находятся в разных системах координат. В таком случае применяется следующий подход: берётся CTR (вероятность клика), и рассчитывается ожидаемый CPM.
Ранжирование по ожидаемой прибыли является не единственным критерием ранжирования.
После принятия решения, какое объявление показать, возвращается рендерное объявление. Это либо HTML (десктоп или лента новостей), либо JSON (клиент).
Для снижения нагрузки используется фича «Плавный запуск» — объявление запускается не для всех пользователей, это делается постепенно. Срабатывает и то, когда браузер пользователя встречает картинку первый раз, скачивает её и кладёт в свой локальный кэш, и когда он ещё раз видит эту картинку, он её не скачивает, так как она есть у него в кэше, и это снижает нагрузку на инфраструктуру.
После показа объявления важно посчитать статистику.
Рекламодатель находит пользователя разными способами, среди которых есть:
- Ретаргетинг, работает следующим образом: на сайте рекламодателя установлен пиксель (ссылка на прозрачную гифку), который находится на серверах «ВКонтакте», браузер пользователя запрашивает эту гифку, и на сервере идентифицируется пользователь и запоминается информация о посещении сайта. Также есть фича, которая определяет, с какой страницы пришёл запрос, что позволяет рекламодателю накапливать группы пользователей по интересам и таргетировать объявления по ним.
- Динамический ретаргетинг, который позволяет показывать объявления с товарами, которые пользователь просматривал, но не совершил активное действие.
- Look alike — искусственный интеллект, который находит аудиторию, похожую на ту, которая уже лояльна к рекламодателю.
- Активности в сообществах.
Команда рекламы «ВКонтакте»
Вот и всё!
Посмотреть полную презентацию можно здесь:
независимое интернет-издание о социальных сетях и современных технологиях
Автор: Лена Гамель
Редактор: Арсений Метелев
