Под Капотом Квест Для Программистов



Под капотом квест для программистов

Сейчас мы работаем над новым проектом - разработка.

онлайн квест , суть которого в том, что программисты, разделенные на два лагеря (ИТ-специалисты и специалисты ФСБ), будут решать самые разные задачи в области программирования на своем любимом языке, проходя при этом интересную историю, читая красочный комикс с захватывающий сценарий.

Скажем сразу, ограничений по языкам программирования нет. Единственное ограничение: их могут просто не установить на сервера из-за их редкости, например.

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

Самой важной проблемой проекта было обеспечение безопасности серверов во время игры, потому что.

Мы позволим вам запускать по сути чужой код без каких-либо ограничений доступа к ресурсам.

Те.

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

При решении задачи необходимо составить список пунктов, составляющих задачу.

Наш список выглядит следующим образом:

  1. У нас есть сервер, на котором будет работать какое-то программное обеспечение, полученное из внешнего источника, и которое, по сути, не знает, что оно будет делать во время работы;
  2. В будущем появится большое количество пользователей, которые будут загружать на сервер большое количество приложений.

    Некоторые из них, вполне возможно, могут даже оказаться вирусами: мы разрешим загружать все, от php до exe файлов.

    Проблема аналогичная, но немного шире: программа может оставаться резидентной и работать на сервере;

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

Затем мы начали искать решения.



Под капотом квест для программистов

Как вы понимаете, в таких условиях это не выход, потому что.

сервер обязательно упадет, это вопрос времени.

Когда кто-то пишет программу с какой-то ужасной ошибкой или когда кто-то загружает вирус.

Здесь, кстати, возникает еще одна проблема: вы можете испортить результаты соперников, используя их как свои.



Под капотом квест для программистов

Если бы нашей платформой был Linux, это было бы решением.

Это было бы хорошее и устойчивое решение, которое устроило бы всех как по стоимости, так и по времени создания.

Однако исторически наша группа — .

NET-разработчики и эта система нам чужда.

Поэтому, чтобы не подрывать безопасность сервера незнанием тонкостей, было решено придерживаться платформы Windows. Вы можете создать песочницу в Windows. По этому вопросу было проведено целое исследование.

Например, вы можете ограничить процесс объемом оперативной памяти, которую он выделяет. Или по объему дисковой памяти, которую может занять файловая система.

Ограничить процесс можно практически во всем, однако, простите меня Билл Гейтс, в ОС Windows слишком много вирусов, а значит, все эти препятствия можно устранить, например, с помощью вируса.

Поэтому на полпути разработки этой версии от нее было решено отказаться.

Несмотря на то, что по сути это было бы крутое решение: нет проблем со сбором результатов работы программы, и нет проблем с очисткой деятельности программы.

С помощью объектов ядра Windows, называемых Jobs, накладываются ограничения на использование ресурсов ОС, а с помощью правил в NTFS накладываются ограничения на работу в файловой системе.

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



Под капотом квест для программистов

На самом деле этот вариант лежит на поверхности, как первое, что приходит на ум.

Есть виртуальная машина, на которой нужно развернуть необходимое приложение и файлы.

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

Данное решение имеет ряд преимуществ, которые делают его выигрышным по всем параметрам:

  1. Состояние машины сбрасывается, а это значит, что внутри как минимум апокалипсис, или удаление операционной системы с жестких дисков.

    Неважно, что происходит. По окончании работы (или по таймауту) просто берём и откатываемся к снапшоту.

  2. Окружающая среда не разрушается после того, как предыдущая машина закончила работу.

  3. Вы можете контролировать каждую мелочь.

  4. Однако есть один недостаток: сложное управление.

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

Однако, как оказалось, есть замечательный продукт: VirtualBox, у которого есть богатый API и так необходимый мне агент. Почему я так рад появлению готового агента? Чем больше компонентов мы запустим с нуля, тем больше ошибок отловим.

Не потому, что мы такие неопытные, нет. Просто всегда есть ошибки, а во вновь написанном ПО тем более.

Код, отлаженный сотнями тысяч прогонов, намного лучше, чем код, написанный самостоятельно.

По этой же причине мы отказались от одного рискованного шага: для экономии ресурсов мы могли использовать ReactOS в качестве гостевой операционной системы.

Это действительно было бы возможно.

Если бы не одно НО.

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

Нисколько.

Возможно, в этой ОС есть всего одна ошибка, и она находится глубоко в ядре.

Но его наличие затронет половину приложений и создаст ощущение нестабильности происходящего.

Если бы не это, мы бы выбрали его, хотя бы по следующим причинам:

  1. Он практически ничего не занимает на жестком диске (~ 40 МБ).

  2. Он почти не занимает оперативной памяти (~ 40 МБ)
  3. Почти не требует ресурсов процессора
Это делает его идеальным, когда вам нужно запустить до 20 виртуальных машин на одной физической машине.

Эта великолепная операционная система станет идеальной, если ее тщательно отполировать до состояния, свободного от ошибок.

Легкая Windows, время запуска которой исчисляется секундами (~5).

Итак, окончательное решение:

  1. Хостинг облачный.

    У него есть API, можно динамически, программно увеличивать узлы, если на сервер придут тысячи людей и начнут играть.

    Вы также можете динамически отключить их.

  2. Узел поднимается из шаблона.

    Шаблон содержит Windows, Git, VirtualBox и скрипт. Скрипт загружает из репозитория последнюю версию исполняемых файлов и запускает сервис.

  3. Служба запускается, подхватывает VirtualBox, ищет на нем шаблонную виртуальную машину и в зависимости от конфигурации клонирует ее в нескольких копиях.

    Машина предварительно настроена с интерпретаторами PHP, Perl, Python, Ruby, Lua, а также Java, версией .

    Net Framework 3.5. Винда 7 64бит.

  4. Начинает прослушивать очередь команд.
  5. При поступлении команды она парсится на свободную виртуальную машину, загружается скрипт плеера или EXE-файл и запускается.

    У вас есть 30 секунд, чтобы решить задачу.

    По истечении времени или завершении процесса файл output.log, в который записан ход выполнения программы OUTPUT, копируется на хост-машину, а виртуальная машина сбрасывается в исходное состояние с откатом к последнему снимку.

  6. Результаты попадают в браузер.



Под капотом квест для программистов

На данный момент мы можем говорить о следующих результатах нашей работы:
  1. Единственное, что нам не нравится, это размер образа виртуальной машины.

    На рабочей станции клонирование образа размером 4 ГБ на пять узлов занимает около 20–30 минут. Исправить ошибку было бы кошмаром.

    Поэтому наличие готового агента на стороне гостевой виртуальной машины и наличие стабильных версий интерпретаторов — это отдельный большой плюс.

    Это в некоторой степени гарантирует бесперебойную работу гостевой машины.

    Скоро загрузим и узнаем, как он поведет себя в облаке;

  2. Общее время, которое занимает весь путь от браузера до виртуальной машины, запуск, ожидание завершения и обратно - в виде логов (с учетом отката гостевой машины в исходное состояние) занимает 4 секунды максимум Загрузка процессора 20%.

    Это отличный результат. Те.

    при запуске сервера с 5 запущенными виртуальными машинами мы сможем обрабатывать до 75 проверок заданий в минуту.

    То есть можно предположить, что можно обойтись всего одним сервером.

    На всякий случай второй подойдет. И третий, если один из двух сработает (а вдруг!).

  3. Мы не проверяли адреса электронной почты при подписке по простой причине: во-первых, если они введут неверные адреса, люди все равно будут получать почту.

    Во-вторых, зачем рассылать спам о том, что ты типа подписался, если можно просто написать это на экране? И в-третьих: зачем заставлять людей заходить в свой почтовый ящик, чтобы удалить этот спам? :)

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

А пока добро пожаловать на сайт игры (и не забудьте написать в комментариях, на каком языке вы хотели бы решать задачи?):

Под капотом квест для программистов



Под капотом квест для программистов

Теги: #игра #квест #распределенные вычисления #Разработка сайтов #.

NET

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.