Прошло всего три недели с момента, как мы написали первую статью, а у нас уже столько новостей, что писать о них можно целый день! Но прежде чем загрузить вас с низкого старта техническими деталями, я приглашаю вас начать игру:
Проблемы, с которыми мы столкнулись
Прежде всего мы столкнулись с муками выбора нового
О финальном решении
Финальное решение такое: дабы снизить нагрузку на сервер и сделать все по KISS, рендер страничек идет на стороне клиента. Мы отдаем только статику, которая лежит в кэше. Это намного упрощает серверную часть и разгружает ее задачами. У клиента остается JavaScript, который работает с сервисом на сервере.
Сервис – это Windows Communication Foundation – приложение, написанное на C#, которое имеет весь набор функций, необходимый для работы сайта: авторизация, регистрация, получение и проверка уровней. Это просто набор GET/POST точек, которые отдают JSON. Почти вся база данных находится в памяти приложения (благо, информации не так много). Это удобно. Это работа со словарем на достаточно небольшом наборе значений. Если что-то меняется (например, статус выполнения программы), это заносится в БД. Также существует еще одно приложение — это менеджер виртуальных машин. Оно состоит из нескольких частей:
- Отдельным потоком работает опрос очереди программ на их поступление: если во внутренней очереди менеджера количество программ не велико, то он пытается забрать из БД штук 10 на выполнение;
- Также отдельным потоком работает опрос виртуальных машин на освободившееся состояние и watchdog. Как только состояние освобождается, на нее отправляется следующа программа из очереди;
- Когда пул виртуальных машин принимат на вход очередную программу, он принимает также строчку, которую необходимо отдать ей на вход и строчку, означающую необходимый результат выполнения программы, который будет засчтан как успешный. Далее машина сбрасывается в снапшот «Windows работает и запущен», туда заливается файл input.txt, и прогарамма запускается. После того как она отработает, с сервера забирается output.txt и сохраняется в базу данных.
Все это время на странице выполнения задания будет крутиться невинный прогресс -бар, информирующий о статусе выполнения программы.
Сервера для этого всего мы заказали с SSD дисками, поскольку основная операция – это восстновление снапшота с жесткого диска, а это дорогостоящая операция. Она должна проходить максимально быстро. Если к нам придет много человек (а мы на это очень надеемся), то медленые диски могут просадить нашу производительность и придется брать еще один сервер. Заплатить на 50 Гб SSD намного дешевле.
Из каких-то дополнительных тонкостей в голову ничего не приходит. Если возникли вопросы, пишите в комментариях, у нас никаких секретов нет. И, в общем… Удачи в прохождении игры! Багрепорты пишите в личку или в форме на сайте, мы будем мониторить состояние чуть ли не круглосуточно
Все это время на странице выполнения задания будет крутиться невинный прогресс -бар, информирующий о статусе выполнения программы.
Сервера для этого всего мы заказали с SSD дисками, поскольку основная операция – это восстновление снапшота с жесткого диска, а это дорогостоящая операция. Она должна проходить максимально быстро. Если к нам придет много человек (а мы на это очень надеемся), то медленые диски могут просадить нашу производительность и придется брать еще один сервер. Заплатить на 50 Гб SSD намного дешевле.
Из каких-то дополнительных тонкостей в голову ничего не приходит. Если возникли вопросы, пишите в комментариях, у нас никаких секретов нет. И, в общем… Удачи в прохождении игры! Багрепорты пишите в личку или в форме на сайте, мы будем мониторить состояние чуть ли не круглосуточно
Автор: SunexDevelopment