Raport Tygodniowy #41 – Serwery Linux – World War 3 – Official Website
Weekly Report

Raport Tygodniowy #41 – Serwery Linux

09/12/2019

Witajcie, żołnierze!

W tym tygodniu chcemy przybliżyć Wam nieco, w jaki sposób planujemy przenieść infrastrukturę sieciową World War 3 na serwery bazujące na Linux’ie. Jest to coś, co chcieliśmy zrobić już od dłuższego czasu, jednak z uwagi na inne zagadnienia, czas oraz ograniczone zasoby, musieliśmy zająć się innymi tematami. Próbowaliśmy w wolnej chwili przyglądać się tej sprawie i w końcu mamy coś konkretnego do przedstawienia i chcieliśmy dać Wam znać, że już wkrótce można spodziewać się zmiany. Jak zwykle: nie podajemy konkretnych dat, ale wewnętrzną rozgrywkę na serwerze z Linux’em mamy już za sobą!

Niektórzy z Was mają prawo nie zdawać sobie sprawy, dlaczego jest to dobrą wiadomością – dla tych graczy śpieszymy z wyjaśnieniami, dlaczego warto przeprowadzać tą zmianę; jakie idą za tym korzyści zarówno dla gracza, jak i dla nas, w studiu.

Istnieje kilka ważnych powodów, dla których przesiadka z Windows’a na Linux’a jest pozytywna, a dwa najważniejsze to wydajność/stabilność oraz koszty.

Pomimo faktu, że serwery z systemem Windows są stabilne i generalnie są dobrym wyborem, w szczególności dla tych, którzy nie są zbytnio zaznajomieni z Linux’em, nadmiar obliczeń ponad te, które są wymagane jest czymś, czego nie potrzebujemy. Nie jest to ogromna różnica, ale na pewno podniesie jakość rozgrywki. Kosztów tłumaczyć nie trzeba – hostowanie serwerów jest drogie, a jeśli jesteśmy w stanie jednocześnie obniżyć wydatki i poprawić jakość dostarczanej usługi, nie ma powodów, by tego nie robić. 

Dodatkowo, w przypadku serwerów hostowanych przez graczy (które planowane są po wydaniu gry), koszt wynajęcia serwera bazującego na Linuxie jest niższy, niż takiej samej maszyny z Windowsem, więc zmiana będzie bardziej przyjazna również dla osób, które będą chciały w przyszłości gościć graczy na swoich serwerach. W tym miejscu należy zaznaczyć, że “planowane” nie oznacza, że możemy ze stuprocentową pewnością powiedzieć, że ten system trafi do World War 3. Chcielibyśmy tego, bo wiemy, jak ważny jest to aspekt przedłużania żywotności gry i tworzenia szerszej społeczności, nie wspominając już o podniesieniu jakości moderacji na każdym serwerze.

Wystarczy już tego wprowadzenia, przejdźmy do opowiadania o tym, jak World War 3 zostało uruchomione na serwerze z Linux’em. Będzie trochę bardziej technicznie, niż zwykle, ale niestety nie da się tego tematu przedstawić w sposób całkowicie zrozumiały dla tych, którzy o hostingu nie mają żadnego pojęcia – nie martwcie się; spróbujemy. Jeśli chcielibyście uzyskać więcej informacji na ten temat, zapraszamy na nasze forum – postaramy się odpowiedzieć najlepiej, jak potrafimy, na każde pytanie.

Konfiguracja

Aby rozpocząć badanie tego zagadnienia, musieliśmy przeprowadzić testy na sporej ilości narzędziach i programach, które pozwoliłyby uruchomić serwer. Po pewnym czasie udało nam się dojść do odpowiedniej konfiguracji i rozpoczęliśmy pracę.

Kompilacja równoległa

Pierwszym pomysłem była kompilacja równoległa. Oznacza to w wielkim skrócie, że można stworzyć program na potrzeby platformy (jak Linux) bez konieczności budowania go na platformie docelowej (przy użyciu Windows’a). Mieliśmy nadzieję, że takie rozwiązanie zadziała, z uwagi na to, że nasz pipeline opiera się na Windows’ie, więc wykorzystanie naszej aktualnej platformy, by stworzyć wersję na Linux’a byłoby idealnym rozwiązaniem. Ten krok zajął nam sporo godzin, po drodze pojawiły się także pewne problemy, z których głównym jest – zgadliście – to, że każda z prób zajmuje sporo czasu.

Podczas kompilacji* natrafiliśmy na kilka problemów z bibliotekami i wtyczkami do silnika, które sypały błędami. Niektóre z nich były dziwaczne i wymagały wysublimowanych rozwiązań, by je obejść lub rozwiązać.
* Kompilacja -w ogromnym skrócie i uproszczeniu jest to krok konieczny, który “przerabia” kod napisany przez programistę i przerabia go na “zrozumiały” dla komputera.

Po uporaniu się z tymi błędami, musieliśmy wejść w kod samej gry, co było możliwe jedynie za pomocą istniejących rozwiązań w Windows SDK lub niedostępne w clang’u, z czego korzystaliśmy w czasie tego zadania.

Po przepisaniu części kodu, by działał zarówno na Windows’ie jak i na Linux’ie, udało się poprawnie skompilować grę i przejść do procesu “gotowania”. “Gotowanie” (ang. cooking), to proces, w którym zbierane są wszystkie informacje zawarte w projekcie gry, pakowanie ich i nadawanie im stanu, w którym są zoptymalizowane pod wydajność, a nie pod edycję, tym samym zajmując zdecydowanie mniej miejsca, niż cały projekt w silniku, na którym pracujemy na co dzień. Krok ten udało się wykonać pomyślnie i przygotowywaliśmy się do uruchomienia WW3 na maszynie postawionej na Linux’ie.

Niestety program uruchomił się i momentalnie się wyłączył, wyświetlając “nieznany błąd”. Próby dojścia do sedna problemu okazały się bezowocne, głównie z uwagi na to, że debugowanie wewnątrz systemu operacyjnego Linux’a wciąż zawierało w sobie ścieżki do plików z Windows’a, co prowadziło nas do plików nieobecnych na danej maszynie, skoro program zbudowany był na innym OS’ie.

Próbowaliśmy potem zdalnego debugowania, co, w skrócie, oznacza połączenie się z procesem Linux’a za pomocą debuggera z Windows’a i sprawdzenie, co się dzieje – niestety, to również po paru podejściach i pomysłach nie zbliżyło nas do celu – więc podjęliśmy decyzję, by spróbować innego podejścia.

Kompilacja natywna

Skompletowaliśmy maszynę z Linux’em, pobraliśmy czystą wersję silnika Unreal Engine 4 i zbudowaliśmy edytor używając tej konfiguracji. Udało się, więc otworzyliśmy projekt World War 3, co zakończyło sie niepowodzeniem – nie było to dziwne, skoro nasza gra opiera się na zmianach, które wprowadziliśmy do silnika; dało to nam za to sporo informacji i danych, co trzeba zmienić. Po znalezieniu problemów i naprawieniu ich, budowa pliku wykonywalnego dla Linux’a nie było już wyzwaniem.

Aktualny stan rzeczy

Możemy już budować i “gotować” grę pod Linux’a, uruchomić edytor projektu i grać w nią przez Windows’a, łącząc się z serwerem na Linux’ie.

Przepisaliśmy także nasze Master Serwery pod Linux’a, ale było to proste z uwagi na fakt, że zawsze były pod taką ewentualność projektowane, a także testowane na tym systemie zanim zostało wszystko przerobione około rok temu.

Wyzwania

Z racji tego, że portowanie systemu zajęło trochę czasu, wciąż jeszcze nieco pracy jest przed nami – głównie aktualizacja wersji Linux’a do najnowszej. Wersja, na której pracujemy aktualnie jest już “starsza” o pół roku, ale nie oznacza to, że będziemy musieli wszystko pisać od nowa. Po przesiadce wystarczy jedynie przeprowadzić parę testów i naprawić błędy, które mogą się pojawić).

Dodatkowo musimy także przeprowadzić testy wydajności i stabilności. Aby tego dokonać, przełączymy na Linux’a najpierw nasze serwery PTE (w ciągu najbliższych paru tygodni), a jeśli wszystko będzie działało poprawnie, zmiana nastąpi także na serwerach Live. Wracając jeszcze do testów: będziemy potrzebować Waszej pomocy, więc kiedy już zmiana nastąpi, dawajcie znać, jak działa, czy jest lepiej, czy gorzej i czy zmiana prowadzi nas w dobrym kierunku.

Zakończenie

Była to długa i ciekawa podróż, a wciąż jeszcze sporo przed nami, jeśli chodzi o serwery. Z wewnętrznych testów wynika, że jest to duży krok dla WW3. Mamy nadzieję, że rozumiecie, czemu nie informowaliśmy o postępach wcześniej i że milczeliśmy, jeśli chodzi o ten techniczny aspekt naszej gry. Widzimy się już niedługo na “nowych” serwerach!