Как устроен HighLoad Cup?

Раунды чемпионата проходят на сайте Highload Cup в режиме онлайн.

Чтобы стать участником чемпионата, необходимо зарегистрироваться и активировать свой аккаунт. Задачи открываются для всех участников одновременно в момент начала раунда. Решения отправляют с помощью локально установленного docker-клиента в специальное хранилище. Решения проверяются автоматически системой CodeHub-CodeRunner, разработанной сотрудниками лаборатории Технопарка Mail.Ru Group.

Для победы в конкурсе необходимо выдать за время чемпионата лучшее решение по подготовленной для чемпионата метрике (об этом - в разделе "Как проверяются решения"). 6 лучших участников получат призы, и по доброй традиции все участники финала получат футболки с символикой чемпионата.

Расписание HLC 2018
 Бета раунд - Декабрь, 13 19:00 Декабрь, 21 19:00 UTC/GMT+3
 Отборочный раунд - Декабрь, 21 19:00 Январь, 31 19:00 UTC/GMT+3
 Финальный раунд - Февраль, 1 19:00 Февраль, 5 19:00 UTC/GMT+3

Кто участвует?

Любой желающий может попробовать свои силы в отборочном раунде Russian Highload Cup.
К участникам финальной стадии турнира есть два требования:

  • На момент даты проведения финала участнику должно быть не менее 18 лет;
  • Участники не могут быть сотрудниками или близкими родственниками сотрудников Mail.ru Group.

 


Как устроена система обстрела?

Система проверки изначально создавалась для другого соревнования под названием Russian AI Cup и была доработана для проведения Highload соревнований. Внутри запускается Танк с движком phantom, который ведет обстрел в несколько потоков с линейно растущим профилем нагрузки (специфично для задачи). Перед началом обстрела у пользовательского решения есть несколько минут (точное время зависит от задачи), чтобы обработать данные из полученного JSON-файла. Корректная работа с этими данными - необходимое условие победы.

Ниже представлена схема серверных компонент.

 

 

Обстрела два - короткими и длинными данными.


Какие ресурсы выдаются участнику?

Все решения запускаются как docker-контейнеры на одинаковых серверах со следующей конфигурацией:

Процессор: Intel Core i7 9xx 2.4 GHz (решению доступно 4 ядра).
Оперативная память: 2 GB RAM.
Жесткий диск: 10 GB HDD.


Я отправил решение, но сколько мне ждать?

Бывает два типа проверки решения: экспресс-обстрел и рейтинговая проверка.

 

Экспресс-обстрел

 

Доступен неограниченное число раз в сутки, и составляет по объему примерно 1/50 от рейтинговой проверки решения. Такая проверка является способом узнать, готово ли решение для рейтинговой проверки. Предполагается, что экспресс-обстрел занимает не более 7 минут.

 

Рейтинговая проверка

 

По результатам рейтинговой проверки у вас есть возможность занимать места в лидерборде текущего чемпионата. Проводится она таким образом:

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

180 секунд длится первая фаза с линейным профилем от 0 до 150 RPS.
Будет выпущено: integral (150/180x) dx from 0 to 180 = 13500 запросов

300 секунд длится вторая фаза с линейным профилем от 0 до 300 RPS
Будет выпущено: integral (300/300x) dx from 0 to 300 = 45000 запросов

60 секунд длится третья фаза с линейным профилем от 0 до 1000 RPS.
Будет выпущено: integral (1000/60x) dx from 0 to 60 = 15000 запросов

Валидация ответов ~2 минуты.
Анализ результатов на сайте ~2 минуты.

Всего обстрел длится порядка 25 минут (при отсутствии очереди)

Всего запросов в обстреле: 88500.


Как проверяются решения?

Решение участника является контейнером docker, который получен с помощью команды docker build. Максимальный размер контейнера на диске не должен превышать 5 Gb. Система проверки выполнит сначала docker pull и затем docker run. В случае успеха, начнется обстрел решения. Участник может использовать любые серверные технологии, языки программирования, фреймворки по своему усмотрению (C++, Java + Tomcat, Python + Django, Ruby + RoR, JavaScript + NodeJs, Haskell или что-то еще). Также и для хранения данных: MySQL, Redis, MongoDB, Memcached - всё, что получится запихнуть в docker :)

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

Основные метрики
Корректность ответа
Время ответа на запрос
Кол-во ответов в секунду

Рейтинг решения считается следующим образом: мы берем время всех верных ответов, которые успел дать API во время обстрела. Прибавляем к этому штрафное время для каждого неправильного ответа или запроса, ответ на который мы не смогли получить (штрафное время всегда равно общему таймауту запроса). Участник, суммарное время которого окажется меньше прочих, оказывается выше в лидерборде и имеет шанс стать победителем чемпионата.


А что делает жюри?

Жюри следят за соблюдением правил и честностью участников. Попытки хакнуть систему обстрела и получить доступ к конфиденциальным данным участников или неопубликованным данным соревнования будут пресекаться и могут караться вплоть до дисквалификации.
Вас предупредили!

Объявление о проведении конкурса