Skip to content

Latest commit

 

History

History
186 lines (145 loc) · 11.4 KB

FAQ.md

File metadata and controls

186 lines (145 loc) · 11.4 KB

FAQ. Часто задаваемые вопросы

Какое расписание у HighLoad Cup 2017?

С 10 августа 15:00 по 31 августа 15:00 по московскому времени.

Какие призы получат победители HighLoad Cup 2017?

Apple iPad Air 2 Cellular 16GB за первое место. WD MyCloud 6TB за второе и третье места. WD MyPassport Ultra 2TB за места с 4 по 6 включительно. По традиции, ТОП-20 участников получат футболки с символикой чемпионата.

Кто может принять участие в соревновании?

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

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

Как проходят раунды HighLoad Cup?

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

Что нужно сделать на соревновании?

Необходимо сначала создать, а затем и развернуть производительный сервер приложения, который будет реализовывать необходимое задачей Web API. Подробнее

Как стать участником чемпионата?

Чтобы стать участником чемпионата, необходимо зарегистрироваться и активировать свой аккаунт. Задачи открываются для всех участников одновременно в момент начала раунда.

Какие серверные технологии можно использовать на соревновании?

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

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

Все решения запускаются как docker-контейнеры на одинаковых серверах со следующей конфигурацией: Процессор: Intel Xeon x86_64 2 GHz 4 ядра. Оперативная память: 4 GB RAM. Жесткий диск: 10 GB HDD.

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

Решение участника является контейнером docker, который получен с помощью команды docker build. Максимальный размер контейнера на диске не должен превышать 5 Gb.

Система проверки выполнит сначала docker pull и затем docker run. В случае успеха, начнется обстрел решения.

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

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

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

А как вы запускаете docker?

Вот максимально близкие к боевым примеры конфига демона докера и конфига compose:

{
  "userns-remap": "custom_user"
}
networks:
  internal-net:
    external:
      name: internal-net
services:
  client_8570:
    cpuset: 0-3
    expose:
    - 80
    image: ***
    mem_limit: 4096M
    memswap_limit: 4096M
    networks:
    -  internal-net
    volumes:
    - ***:/tmp/data:ro
  tank:
    depends_on: &id001
    - client_8570
    image: tank
    links: *id001
    networks:
    -  internal-net
version: '2'

Какие виды обстрела существуют?

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

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

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

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

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

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

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

120 секунд длится вторая фаза с постоянным профилем в 100 RPS. Будет выпущено: 100 * 120 = 12000 запросов

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

Валидация ответов ~20 секунд. Анализ результатов на сайте ~30 секунд. Всего обстрел длится порядка 15 минут (при отсутствии очереди). Всего запросов в обстреле: 162090.

Кнопка рейтингового обстрела недоступна. Что делать?

Скорее всего вы запустили рейтинговый обстрел уже 2 раза в течение 12 часов. Подождите. Если проблема не будет решена, то напишите в поддержку. Мы постараемся вам помочь.

Как рассчитывается рейтинг?

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

  1. Корректность ответа
  2. Время ответа на запрос
  3. Кол-во ответов в секунду

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

Какая последовательность реализации решения и загрузки его в систему?

Подробнее об этом вы можете прочитать здесь.

Где можно найти пример базового решения?

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

Что происходит после загрузки решения в хранилище системы?

Подробнее об этом вы можете прочитать здесь.

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

Можно попробовать этого неофициального клиента или другого от одного из наших участников.

Я вижу при обстреле:

Ошибка при выполнении docker-compose up...
client_8649_1 |Killed

Что это значит?

Скорее всего пришел OOMKiller и убил решение, т.к. вы не влезли в RAM