Квест для программистов: перезагрузка

в 7:38, , рубрики: Блог компании Luxoft, Веб-разработка, игра, квест, Облачные вычисления, распределённые вычисления, метки: , ,

Прошло всего три недели с момента, как мы написали первую статью, а у нас уже столько новостей, что писать о них можно целый день! Но прежде чем загрузить вас с низкого старта техническими деталями, я приглашаю вас начать игру:

Квест для программистов: перезагрузка

Проблемы, с которыми мы столкнулись

Прежде всего мы столкнулись с муками выбора нового хостинг-провайдера. Как многие заметили, игра не была открыта в обещаную дату. Вернее, мы ничего не рассказали в день ее открытия. Хотелось бы рассказать вам, почему. Мы уже писали, что мы выбрали Azure для своих целей, поскольку ценообразование и легкость настройки сильно подкупают на этой платформе. Однако, в один прекрасный день две виртуальные машины просто взяли и исчезли из панели управления! Это было шоком для нас. Не потому что мы что-то потеряли, нет. Все хранится в системе контроля версий. Шокировало то, что это могло произойти в разгар игры. Это был бы полный провал, и поэтому мы моментально приняли решение о смене хостинг-провайдера. Из русских облачных хостеров нам понравился только один. Вторая проблема, с которой мы столкнулись, случилась с нами уже во время сотрудничества со новым хостинг-провайдером. Когда все уже было практически готово, а на сайте было зарегистрировано некоторое количество игроков, перед нами стояла задача замены операционной системы, на которой работал VirtualBox, поскольку на Windows Server 2008 R2, на которой все работало, VirtualBox работал не стабильно. Также необходимо было перебросить базу данных. Поскольку за окном была уже ночь, интенсивность пользователей на сайте сошла на нет и можно было заняться базой данных. У хостинг-провайдера существует замечательная функция – переброс жесткого диска от одного сервера на другой.Должно занимать секунды и с учетом выбранной нами архитектуры приложения, звучало безболезненно. Одноко, когда мы начали процедуру переброса, жесткий диск отсоединнился от одного сервера, но ко второму не присоединился. Консоль сообщила об ошибке. Так же, он и назад не присоединился, что опять таки вызвало у нас много проблем: по сути это одначало что мы потеряли базу данных. Конечно, с одной стороны это было глупостью: довериться сервису переброса жестких дисков. С другой стороны, если нам необходим хостинг, мы же доверяемся хостинг-провайдеру? Обращение в техническую поддержку заняло сутки, после чего нам сообщили что присоединить не возможно, т.к. сервер и жесткий диск находятся в разных регионах. На вопрос, как тогда они были присоеденены ранее, тикет закрыли. Как итог, после множества потраченных нервов, сервер расчетов был проинсталлирован на локальном железе, установленном внутри компании. Перебоев с электричеством, вроде, на моей памяти, не было. Так что пока что это самое стабильное решение.

О финальном решении

Финальное решение такое: дабы снизить нагрузку на сервер и сделать все по KISS, рендер страничек идет на стороне клиента. Мы отдаем только статику, которая лежит в кэше. Это намного упрощает серверную часть и разгружает ее задачами. У клиента остается JavaScript, который работает с сервисом на сервере.
Сервис – это Windows Communication Foundation – приложение, написанное на C#, которое имеет весь набор функций, необходимый для работы сайта: авторизация, регистрация, получение и проверка уровней. Это просто набор GET/POST точек, которые отдают JSON. Почти вся база данных находится в памяти приложения (благо, информации не так много). Это удобно. Это работа со словарем на достаточно небольшом наборе значений. Если что-то меняется (например, статус выполнения программы), это заносится в БД. Также существует еще одно приложение — это менеджер виртуальных машин. Оно состоит из нескольких частей:

  • Отдельным потоком работает опрос очереди программ на их поступление: если во внутренней очереди менеджера количество программ не велико, то он пытается забрать из БД штук 10 на выполнение;
  • Также отдельным потоком работает опрос виртуальных машин на освободившееся состояние и watchdog. Как только состояние освобождается, на нее отправляется следующа программа из очереди;
  • Когда пул виртуальных машин принимат на вход очередную программу, он принимает также строчку, которую необходимо отдать ей на вход и строчку, означающую необходимый результат выполнения программы, который будет засчтан как успешный. Далее машина сбрасывается в снапшот «Windows работает и запущен», туда заливается файл input.txt, и прогарамма запускается. После того как она отработает, с сервера забирается output.txt и сохраняется в базу данных.

Все это время на странице выполнения задания будет крутиться невинный прогресс -бар, информирующий о статусе выполнения программы.
Сервера для этого всего мы заказали с SSD дисками, поскольку основная операция – это восстновление снапшота с жесткого диска, а это дорогостоящая операция. Она должна проходить максимально быстро. Если к нам придет много человек (а мы на это очень надеемся), то медленые диски могут просадить нашу производительность и придется брать еще один сервер. Заплатить на 50 Гб SSD намного дешевле.
Из каких-то дополнительных тонкостей в голову ничего не приходит. Если возникли вопросы, пишите в комментариях, у нас никаких секретов нет. И, в общем… Удачи в прохождении игры! Багрепорты пишите в личку или в форме на сайте, мы будем мониторить состояние чуть ли не круглосуточно
Все это время на странице выполнения задания будет крутиться невинный прогресс -бар, информирующий о статусе выполнения программы.
Сервера для этого всего мы заказали с SSD дисками, поскольку основная операция – это восстновление снапшота с жесткого диска, а это дорогостоящая операция. Она должна проходить максимально быстро. Если к нам придет много человек (а мы на это очень надеемся), то медленые диски могут просадить нашу производительность и придется брать еще один сервер. Заплатить на 50 Гб SSD намного дешевле.
Из каких-то дополнительных тонкостей в голову ничего не приходит. Если возникли вопросы, пишите в комментариях, у нас никаких секретов нет. И, в общем… Удачи в прохождении игры! Багрепорты пишите в личку или в форме на сайте, мы будем мониторить состояние чуть ли не круглосуточно
Квест для программистов: перезагрузка

Автор: SunexDevelopment

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js