Сервис имитации показа объявлений по алгоритму RTB
Сервис: http://adtest.artrediska.com/
Админка: http://adtest.artrediska.com/admin/
Для каждого объявления можно создать "Расписания показов". В расписании задается: дата начала, количество дней показа, в какие дни недели показывать, активные категории, CPM.
Расписаний может быть несколько для одного объявления и они могут перекрывать друг друга по датам.
После сохранения расписания, автоматически создаются записи в служебной модели AdCalendarDate
(Дни показа). Каждая запись AdCalendarDate
содержит (дата, ID объявления, ID расписания, ID категории, CPM)
. Такая денормализованая схема позволяет сделать выборку данных за один день и получить список всех показываемых объявлений в этот день и выбрать для каждой категории - какое объявление выиграет аукцион. При удалении расписания - записи AdCalendarDate
тоже удаляются.
Предполагается что объявление с максимальным CPM забирает себе все просмотры за день по данной категории.
Предполагается что у нас есть статистика показов страниц в сутки по каждой категории. Эти данные храняться в модели Category
.
-
Можно использовать эту же структуру данных для того чтобы считать бюджет размешения по каждому объявлению - данные для вычисления "второй цены" у нас есть в
AdCalendarDate
. -
Можно усложить хранение статистики просмотров - завести отдельную модель (таблицу) в которой будут будут усредненные данные по дням недели и дням месяца.
- 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