Hybrydowy modowany serwer Minecraft

Prywatny projekt infrastrukturalny polegający na zaprojektowaniu i utrzymaniu hybrydowego serwera Minecraft.

O projekcie

Projekt powstał jako prywatny serwer Minecraft uruchomiony na potrzeby wspólnej rozgrywki ze znajomymi. Serwer został zaprojektowany jako hybrydowe środowisko łączące ekosystem pluginów z modami. Dlatego wybór silnika padł na Mohist, mimo znanych ograniczeń tego rozwiązania. Celem tego projektu było utrzymanie stabilnego serwera Minecraft łączącego mody Forge z pluginami Bukkit.

Hardware i infrastruktura

Serwer został w pełni skonteneryzowany, co pozwoliło na izolację zasobów i łatwe zarządzanie serwerem.

  • CPU: 4 vCPU Intel Core i5-8500T
  • RAM: 16 GB DDR4
  • Zarządzanie: kontener Dockera pod kontrolą panelu pelican.dev.

Generacja świata

Zamiast standardowej, minecraft'owej generacji terenu, wykorzystałem głównie modyfikację ReTerraForged, którą skompilowałem, z tego repozytorium. Pozwoliło to na uzyskanie efektów widocznych na powyższych zdjęciach — unikalność świata, nieosiągalną dla standardowego generatora terenu.

Całość została dopełniona zbudowaniem klimatycznego spawnu.

Architektura serwera

Logika serwera została rozdzielona na warstwy funkcjonalne:

  1. Warstwa sieciowa: gracze łączyli się do serwera poprzez reverse-proxy (NeoProtect), które odpowiadało za filtrowanie ruchu i ochronę przed atakami DDoS.
  2. Warstwa logiki: hybrydowy silnik łączył funkcjonalności modów i pluginów. Pluginy odpowiadały głównie za administrację, bezpieczeństwo, uprawnienia i kontrolę świata, natomiast mody skupiały się na rozszerzaniu mechanik i dodawaniu contentu.
  3. Warstwa danych: dane z pluginów były przechowywane w MariaDB, co pozwoliło na ich niezależność od plików serwera oraz ich przechowywanie danych w jednym miejscu.

Bezpieczeństwo serwera

  • Logowanie premium + non-premium

Użytkownik podczas pierwszego wejścia na serwer musiał założyć konto. Przy każdym następnym logowaniu gracz musiał uwierzytelnić się hasłem, chyba że korzystał z konta premium, gdzie logowanie było automatyczne (hasło nie było wymagane).

  • Ochrona griefingu i rollbacki

Do ochrony przed griefingiem był wykorzystywany głównie plugin WorldGuard, który umożliwia zdefiniowanie regionów i ustawienie flag, co w danych regionach jest dozwolone.
W przypadku, gdy dochodziło do zgriefowania danej części świata, był możliwy rollback za pomocą pluginu CoreProtect.

Wydajność i optymalizacja

Utrzymanie stabilnego poziomu 20 TPS przy zaawansowanym generatorze terenu i dużej liczbie modów mechanicznych było możliwe dzięki:

  • Pre-generacji świata: wykorzystałem narzędzie Chunky w celu wyrenderowania świata w promieniu kilku tysięcy bloków, co pozwoliło na brak konieczności generowanie terenu w czasie rzeczywistym w znacznym obszarze mapy.
  • Wielowątkowości: dzięki silnikowi Mohist, obciążenie wynikające z logiki pluginów oraz mechanik modów zostało efektywnie rozłożone na dostępne 4 rdzenie procesora. Pomiary narzędziem spark wykazały stabilność środowiska nawet przy 10 graczach online.

Wyzwania i ograniczenia

  • Problemy z kompatybilnością: łączenie modów z pluginami na Mohiście wymagało odpowiedniego dopasowanie i testów stabilności.
  • Ograniczenia architektury sieciowej: wykorzystany stack technologiczny uniemożliwił wdrożenie proxy Velocity.
  • Ręczne aktualizacje: wszystkie zależności trzeba było aktualizować ręcznie.

Co można było zrobić lepiej

  • Alternatywne generatory Nether'u i End'u: generatory Netheru i Endu nie współpracowały poprawnie z hybrydowym silnikiem.
  • Lokalizacja reverse-proxy: zastosowana ochrona NeoProtect, wprowadzała odczuwalne opóźnienia. Rozwiązaniem byłaby migracja na lokalnego dostawcę ochrony w celu zredukowania pingu.

Powiązane projekty