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).
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).
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.
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)
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.
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.
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)
możesz nas złapać na naszym Discordzie (link w stopce strony)
Światy | 145 |
---|---|
Sojusze | 9 083 |
Gracze | 135 269 |
Miasta | 4 314 622 |
Podboje | 7 619 323 |
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 |