В эту субботу в московском офисе Авито пройдет чемпионат по PostgreSQL. Это соревнование по управлению базами данных с практическими задачами.
Мы реализовали его на платформе, полностью собранной из компонентов с открытым исходным кодом.
Мы уже опробовали его на двух внутренних конкурсах (вышло интересно), а сейчас готовимся провести #PGHACK для всех заинтересованных аспирантов (по-прежнему принимаем заявки на участие, ссылка в конце текста).
В этом посте я расскажу о том, как мы готовили площадку к чемпионату.
Коротко об игре
Подробно об игре я рассказал в эта почта .
Короче говоря, это как CTF, только про Postgres.
Как это работает?
Платформа собрана из проверенных временем компонентов с открытым исходным кодом.Все это я собрал и отладил сам, кроме настройки OpenVPN. Расскажу о компонентах более подробно.
Игровой VPN
Для построения игровой сети используется Open VPN — достаточно стандартное решение для подобных задач.На ноутбуках игроков не требуется никакого дополнительного программного обеспечения, поскольку они будут подключаться к сети с виртуальных машин с предустановленным VPN. Ключ от игровой сети (и всех последующих заданий) участники получат из трекера заданий.
Чекер проверит выполнение заданий.
Трекер задач
Пользователь входит в игру с предоставленным ему логином и паролем, после чего видит свой уникальный VPN-ключ для настройки виртуальной машины и трекер со списком задач, которые ему нужно будет решить.Во время чемпионата будет включена таблица лидеров, на которой вы сможете наблюдать за изменением количества очков других участников.
Шашка
Чекер ходит по виртуальным машинам игроков и проверяет результаты — в принципе так же, как и на CTF. Под капотом у него есть Fabric, которая изначально предназначена для параллельного выполнения задач на нескольких серверах/компьютерах.Мы не делали новый компонент: Fabric гарантирует, что процесс проверки будет максимально честным и параллельным — это у него в крови.
Виртуальные машины
На виртуальных машинах, подключающихся к VPN, установлены база данных и приложение.Они решают проблемы.
Виртуальные машины создаются автоматически с помощью Packer от HashiCorp. Процесс продвижения также автоматический.
Для этого используется Ansible, поэтому виртуальную машину можно пересобирать любое количество раз.
Правильность этого решения подтвердил процесс подготовки – мы полностью исключили рутинные операции и постарались свести к минимуму изменения и уточнения.
Подготовка заданий
Какие-то задачи были придуманы сразу, какие-то изменены в ходе обсуждений и тестовых запусков.Мы создали в Confluence таблицу, куда вы можете добавить свою задачу и описать ее решение.
Важно было придумать задачи с четкими решениями.
Проверка должна быть быстрой, простой и автоматической: иначе параллельно проверить 50-60 участников (на такое количество игроков рассчитана система) будет проблематично.
Некоторые задачи даже упростились.
В некоторых случаях от менее распространенных решений отказались в пользу стандартных методов работы.
Изначально мы планировали, что уделяем столько же времени, сколько и на обычный честный CTF — около 8 часов.
Но мы поняли, что это довольно много.
В итоге #PGHACK продлится около 4 часов, не считая времени на настройку окружения.
Как показала практика, гроссмейстер постгреса может решить все задачи за 2 часа.
Подготовка игрового приложения
Первая версия мини-сайта Авито была сделана в новогодние праздники с помощью Flask. Он не имеет ничего общего с технологиями, которые используются на реальном сайте, но старается быть на него похожим — это тоже доска объявлений.
В процессе работы из приложения полностью вырезали ORM, и оно начало вызывать функции базы данных.
Мы взяли набор игровых данных от коллег-аналитиков, которые пару месяцев назад провели собственное соревнование.
Это «живая» реклама, в которой полностью удалены персональные данные.
Он весит около 4 ГБ, поэтому мы не можем выполнять большие сложные запросы на виртуальных машинах.
Проверка решений проблем стала простой и быстрой.
Допущенные ошибки
На первом этапе подготовки мы планировали быть в тренде: собрать платформу из микросервисов на разных языках — Go, Python, PHP. Но мы от этого отказались: участникам было бы сложно разобраться в большом количестве непонятных микросервисов, и игра превратилась бы не в исправление Postgres, а в возню с микросервисами — кто куда ходит, что что делает. Была еще одна трендовая идея — использовать Docker. Отказались, потому что поняли, что большинство администраторов баз данных не готовы к его использованию: они работают с другими системами и в других плоскостях.Мы подошли к классической виртуальной игре, как и в большинстве CTF. В ходе боя выяснилось, что шашка должна быть серверной.
Изначально он заходил по SSH на игровую виртуальную машину и выполнял команды на ее стороне.
Во время первой тестовой игры мы выяснили, что те наши ребята, которые имели хорошую базу знаний по Linux, улавливали эти команды и могли обмануть проверяющую.
Поэтому он стал серверным, и большая часть проверок была перенесена туда.
Список компонентов с открытым исходным кодом платформы PGHACK
Пакер Анзибль ВиртуалБокс ОпенВПН Ткань Колба И конечно PostgreSQL !Что тогда
Мы не планируем останавливаться на одном чемпионате #PGHACK. Мне бы хотелось, чтобы это стало регулярным событием для сообщества postgres. Поэтому детального анализа задач не будет. После мероприятия появится фотоотчет наша страница в ФБ .Кстати, регистрация на чемпионат еще открыта: заполнить заявку до вечера 31 августа и участвуйте в #PGHACK! Теги: #pghack #postgres #postgresql #конкурс #avito #open source #postgresql #программирование
-
Активное Сравнение Файлов – Что Это Такое
19 Oct, 24 -
Мировая Экономика
19 Oct, 24 -
Эксплуатируемая Уязвимость В Почте Mail.ru
19 Oct, 24 -
Внимание Внимание!
19 Oct, 24 -
Комментарии К Коду Как Вид Искусства
19 Oct, 24