Co składa się na infrastrukturę GRCRT i dlaczego podjęliśmy takie decyzje?

Przerabialiśmy różne warianty infrastruktury i wyciągaliśmy z tego wnioski. Poniżej pokrótce opisujemy z czym się mierzyliśmy (i z jakim rezultatem).

Jaka architektura?

VPS – spośród wielu testowanych niestety żaden się nie sprawdził. Głównie ze względu na zarządzanie zasobami przez hypervisor a także ograniczenia nałożone przez hosting (często ukryte).

Serwer dedykowany – wydaje się być dobrym rozwiązaniem, ale tutaj wyzwaniem jest IOPS (czas dostępu do dysku). Na dyskach talerzowych, IOWAIT potrafiło sięgać 30% czasu. Dyski SSD/NVMe z kolei mają inną wadę: minimalna wielkość bloku to 4KB, a przy dużej ilości małych plików ~300B, owszem, miejsce jest, ale nie ma i-nods :/

U nas są więc zarówno dyski NVMe jak i zwykłe talerzowe, w parach w RAID1. Na dyskach NVMe jest to co musi być szybko dostępne (baza danych, zapisy użytkowników, obrazki), a na talerzowych to, co może działać wolniej (skrypty php i perl, pliki json dla obrazków etc).

Jaki serwer www?

Apache? – dobrze działa z perl (o tym później) oraz php, ale jest zbyt wolny.

Nginx? – nie umie poprawnie obsłużyć perl.

OpenLiteSpeed? – padł przy dużym obciążeniu.

Co pozostaje? NGINX + Apache – jest prawie dobrze. Prawie, bo użytkownicy z drugiej strony globu czekają w kolejce na obrazki etc. CDN rozwiązuje tenże problem, a przy okazji odciąża serwer.

Ładowanie danych…

Co godzinę serwer pobiera wszystkie dane ze wszystkich aktywnych serwerów InnoGames i ładuje to do tabel. Autorski mechanizm bash+perl oprócz pobierania i ładowania danych rozpoznaje, czy z któregoś serwera już nie ma co pobierać (bo został zamknięty) oraz czy przypadkiem nie został otwarty nowy serwer Dane ładowane są w taki sposób, że brak dostępności dla użytkowników wynosi poniżej 1s, podczas gdy rzeczywisty czas ich pobierania i ładowania do bazy (na chwilę obecną 1591 plików dla wszystkich aktywnych światów) wynosi: ~15m

Bazy też były różne, ale najszybsza okazała się być MySQL (partycjonowanie tabel, szybkość ładowania plików tekstowych)

Alternatywne źródła finansowania

Staraliśmy się o jakiekolwiek wsparcie ze strony InnoGames, ale nie byli zainteresowani. Za to chętnie zaimplementowali w grze nasze rozwiązania (na przykład moduł rezerwacji miast czy wyświetlanie monet bohaterów) 😉

Reklam nie ma z dwóch powodów. Po pierwsze, pojawiały się reklamy dla dorosłych czego sobie nie życzyliśmy, ale też nie mieliśmy wpływu. Po drugie, InnoGames zabroniło wyświetlać reklamy w grze. Stwierdziliśmy, że strona nie musi być jedną wielką reklamówką i postawiliśmy na darowizny – co przez pierwsze 2 lata jakoś wychodziło.

Podsumowując, część sprzętowa naszego projektu

serwer główny

CPU: Intel Xeon E3-1230v6 – 4c/8t – 3.5 GHz/3.9 GHz
RAM: 32 GB ECC 2133 MHz
dyski: 2×450 GB SSD NVMe (Soft RAID), 2×2 TB HDD SATA (Soft RAID) – tylko po to, aby przechować ~3 000 000 plików.

Serwer backupu (na innym kontynencie)

ponieważ nie podlega takim obciążeniom jak serwer główny, to wystarczy ułamek jego parametrów. Nie może to być jednak Atom, bo jest zbyt wolny. Zatem jakikolwiek Intel Xeon z wystarczającą ilością miejsca na dysku. Ilość RAMu nie ma znaczenia.

Obecne parametry serwera kopii zapachowych, to:
CPU: Intel Xeon E3-1225v2 - 4c/4t - 3.2 GHz/3.6 GHz
RAM: 16 GB 1333 MHz
dysk: 3×2 TB HDD SATA Soft RAID (RAID5)

Pytania?

możesz nas złapać na naszym Discordzie (link w stopce strony)

W bazie aktualnie jest:

Światy 145
Sojusze 9 083
Gracze 135 269
Miasta 4 314 622
Podboje 7 619 323

Share


.

Dane zapisane na serwerze:

Graczy używających GRCRTools 8 681
Zapisanych ustawień GRCRTools 207 986
Zapisanych obrazów dla raportów 2 029 265
Raportów w formacie HTML 1 447 531
Raportów zapisanych jako obraz 818 538