Еженедельный Рапорт #41 — Серверы на Linux — World War 3 — Official Website
Weekly Report

Еженедельный Рапорт #41 — Серверы на Linux

09/12/2019

Сегодня мы хотим рассказать вам о наших планах по переходу World War 3 на серверы Linux. Это давнее желание, но из-за ограниченных ресурсов и времени нам пришлось расставить приоритеты в пользу других пунктов. В настоящее же время всё приобретает более солидную форму, так что мы можем с уверенностью объявить: переходу быть. Точных дат пока нет, но (по секрету) мы уже успешно играем на сервере Linux.

Наверняка не все из вас воспримут такую новость как нечто существенное и важное, поэтому сейчас мы вкратце обозначим преимущества. Безусловно, серверы Windows не являются плохим выбором, но всё же Linux при умелом использовании выражает бо́льшую привлекательность в плане стабильности, включая лучшую производительность и относительно невысокую стоимость. Кстати, если говорить об аренде серверов игроками (планируем осуществить после релиза), то и здесь она обойдется дешевле, нежели Windows.

Такое вот вступление. А теперь давайте погрузимся в непосредственно предысторию грядущего действа. 

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

Конфигурация

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

Кросс-компиляция

Первым в плане стояло использование кросс-компиляции, что, по сути, означает: вы можете построить программу для платформы (как Linux), на самом деле не строя ее на целевой платформе (а используя Windows). Мы хотели, чтобы это сработало, т.к. весь проект завязан на Windows, и его использование для построения версии Linux стало бы идеальным решением. Из-за различных проблем сей этап оказался довольно продолжительным. 

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

*Компиляция — в данном случае и в очень упрощенном виде, это просто шаг, что берет написанный людьми код и превращает его в нечто понятное компьютеру.

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

После перенастройки части кода для работы сразу на Windows и Linux мы успешно скомпилировали игру и начали процесс приготовления, что подразумевает упаковку всех имеющихся данных игры и их перевод в состояние, оптимизированное для производительности, а не редактирования, и значительно меньшее от того массивного размера проекта, над которым мы работаем ежедневно. Этап прошел нормально, и мы приготовились к его запуску на машине Linux.

К сожалению, программа запустилась вместе с «неизвестной ошибкой». Дебаггинг не принес результатов, так как отладка изнутри ОС Linux всё ещё имела встроенные файлы пути Windows и приводила нас к файлам, которые не присутствовали на машине, поскольку программа была построена с использованием другой системы. Мы перешли к удаленной отладке, подключившись к процессу Linux с помощью отладчика Windows, и проверили, что происходит, — также безрезультатно. Мы решили задействовать иной метод.

Встроенная компиляция

Мы сконфигурировали машину Linux, загрузили чистый движок UE4 и построили редактор, используя данный сетап. Это возымело успех, и мы отправились открывать проект World War 3 в чистом редакторе, конечно же, потерпев неудачу — т.к. наша игра полагается на внесенные нами в движок изменения, это не стало сюрпризом, но дало ценную информацию о том, что следует изменить. После обнаружения и исправления проблем, всё пошло как по маслу с созданием исполняемого файла сервера для Linux.

Текущее состояние

Теперь мы можем создавать и готовить игру под Linux, можем запускать редактор проекта и играть из-под Windows, подключившись к серверу Linux. Мы также переключили наши мастер-серверы на Linux, что было, в принципе, не сложно, ведь на это всегда был расчет, и тестировалось на Linux со времени переделки около года назад.

Что осталось

Поскольку работа по портированию заняла некоторое время, нам нужно ещё кое-что сделать, где главное — обновить версию Linux до текущей и придерживаться заданного направления. Сейчас наша версия примерно на полгода отстает от LIVE (это не означает, что придётся всё переделывать — после обновления мы должны будем лишь проверить и исправить любые проявившие себя небольшие проблемы).

Кроме того, нам предстоит хорошенько испытать стабильность и разницу в производительности. Для чего в ближайшие недели мы переключим на Linux наши серверы PTE, и следом — если всё будет работать нормально, а от вас мы получим положительные отзывы — изменения появятся и на LIVE.

Заключение

Путь был длинный, и ещё есть над чем потрудиться, но, как показывает внутреннее тестирование, нас ждёт очередной шаг вперёд. Думаем, вы понимаете, почему ранее мы особо не распространялись об этом. Надеемся увидеть вас на наших новых Linux-серверах уже через несколько недель и, конечно же, до встречи в следующем еженедельном рапорте! Хорошей недели вам, друзья!