Skip to content

antipetrov/rtb-simulation

Repository files navigation

Объявлятор

Сервис имитации показа объявлений по алгоритму RTB

Тестовый сайт

Сервис: http://adtest.artrediska.com/

Админка: http://adtest.artrediska.com/admin/

Особенности реализации

Для каждого объявления можно создать "Расписания показов". В расписании задается: дата начала, количество дней показа, в какие дни недели показывать, активные категории, CPM.

Расписаний может быть несколько для одного объявления и они могут перекрывать друг друга по датам.

После сохранения расписания, автоматически создаются записи в служебной модели AdCalendarDate (Дни показа). Каждая запись AdCalendarDate содержит (дата, ID объявления, ID расписания, ID категории, CPM). Такая денормализованая схема позволяет сделать выборку данных за один день и получить список всех показываемых объявлений в этот день и выбрать для каждой категории - какое объявление выиграет аукцион. При удалении расписания - записи AdCalendarDate тоже удаляются.

Предполагается что объявление с максимальным CPM забирает себе все просмотры за день по данной категории.

Предполагается что у нас есть статистика показов страниц в сутки по каждой категории. Эти данные храняться в модели Category.

Возможные дальнейшие улучшения

  1. Можно использовать эту же структуру данных для того чтобы считать бюджет размешения по каждому объявлению - данные для вычисления "второй цены" у нас есть в AdCalendarDate.

  2. Можно усложить хранение статистики просмотров - завести отдельную модель (таблицу) в которой будут будут усредненные данные по дням недели и дням месяца.

Локальный (отладочный) запуск

Требуется

  • Python 3.5
  • PostgreSQL 11.2
  • Docker, docker-compose

Если запустить docker-compose up -d - поднимется PostgreSQL и под нее как раз все сконфигурировано в settings.py

Запуск

  • Установка зависимостей: pip install -r requirements.txt
  • Запуск БД из докера: docker-compose up -d
  • Запуск тестового бекенда: ./manage.py startserver

Деплой (докером)

Все зависимости собираются в докер контейнере.

Для старта: docker-compose -f docker-compose.stage.yaml up -d --build

Будут запущены postgresql, backend Объявлятора (uwsgi внутри контейнера) и nginx

Конфиг nginx - в исходниках, в config/nginx/conf.d/adtest.artrediska.com.conf

Конфиг uwsgi - config/uwsgi/uwsgi.ini

Для тестового сервера используется django-конфиг ad_buy/ad_buy/settings_stage.py

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published