Gaming

Jak zbudować backend gry: matchmaking, leaderboardy, skalowanie?

Backend decyduje o tym, czy gra udźwignie premierę i peaki ruchu. Pokazujemy, jak podchodzimy do backendu gry, matchmakingu, leaderboardów i skalowania, wzmacniając Twój zespół inżynierami, którzy budowali takie systemy na AWS i Kubernetes.

Rozgrywka może być dopracowana co do klatki, a gra i tak zawiedzie w dniu premiery, jeśli backend nie udźwignie ruchu. Gracze nie wybaczają sesji, które się rozłączają, rankingów sprzed godziny ani kolejek do matchmakingu ciągnących się w nieskończoność. Dla architekta czy backend leada w studiu gier backend gry to nie warstwa pomocnicza, tylko element, który bezpośrednio przekłada się na retencję i oceny.

Z naszego doświadczenia najtrudniejsze nie jest napisanie pojedynczej usługi, tylko złożenie całości, która wytrzyma nagły, nierównomierny ruch i da się utrzymać przez lata. Nie mamy tu jednego sztandarowego tytułu, ale mamy coś konkretniejszego dla Twojego zespołu: inżynierów, którzy projektowali rozproszone systemy na AWS i Kubernetesie, w tym w kontekście gamingowym. To oferujemy jako kompetencję gotową do wpięcia w projekt.

Dlaczego backend gry jest aż tak trudny?

Backend gry łączy dwa wymagania, które zwykle się wykluczają: bardzo niską latencję i bardzo dużą zmienność obciążenia. Sesja w grze sieciowej toleruje opóźnienia liczone w dziesiątkach milisekund, więc architektura musi minimalizować liczbę przeskoków między graczem a serwerem gry i trzymać stan rozgrywki jak najbliżej miejsca, gdzie się ona toczy.

Do tego dochodzi profil ruchu, jakiego nie spotkasz w typowej aplikacji biznesowej. Liczba graczy potrafi wzrosnąć dziesięciokrotnie w kilkanaście minut, gdy rusza wydarzenie w grze albo pojawia się streamer z dużą widownią. Backend musi przyjąć ten skok bez degradacji dla osób, które już grają, i równie sprawnie zejść z zasobów, gdy ruch opada. To zupełnie inny reżim projektowy niż przewidywalny, rosnący powoli ruch.

Jak działa matchmaking i warstwa sesji?

Matchmaking to serce rozgrywki wieloosobowej i miejsce, w którym najłatwiej zepsuć odczucia graczy. Kolejkujemy graczy według kryteriów (poziom umiejętności, region, tryb), dobieramy ich w sesje i dopiero wtedy przydzielamy serwer gry. Kluczowe jest, żeby czas oczekiwania był krótki, a dobór uczciwy, bo te dwa cele ciągną w przeciwne strony.

W praktyce budujemy to jako kilka współpracujących usług:

Taki podział pozwala skalować każdy element osobno. Alokacja serwerów gry często opiera się o Kubernetes i dedykowane kontrolery, które traktują sesję jak krótkożyjący zasób.

Jak zbudować leaderboardy i progresję gracza?

Leaderboardy wyglądają na prosty problem, dopóki nie zobaczysz ich pod obciążeniem. Globalny ranking dla milionów graczy, aktualizowany na bieżąco, to klasyczny przypadek, w którym naiwne zapytanie do bazy przestaje działać przy pierwszym peaku. Dlatego leaderboardy i skalowanie projektujemy razem, od początku.

Zwykle opieramy ranking o struktury posortowane w pamięci (np. Redis z posortowanymi zbiorami) i uzupełniamy je o trwały zapis jako źródło prawdy. Przy progresji dbamy o:

Progresja gracza, poziomy, odblokowania, waluta w grze, wymaga przy tym transakcyjności, bo tu błąd oznacza realną stratę dla gracza.

Gdzie zapisywać dane gracza i jak zrobić cloud sync?

Dane gracza to stan, którego nie wolno zgubić: postęp, ekwipunek, ustawienia, zakupy. Projektujemy je z założeniem, że ten sam profil pojawi się na kilku urządzeniach i musi się między nimi synchronizować bez konfliktów. Cloud sync brzmi banalnie, dopóki dwa urządzenia nie zapiszą zmian offline i nie połączą się jednocześnie.

Rozwiązujemy to wersjonowaniem stanu i jasnymi regułami rozstrzygania konfliktów, zamiast liczyć na to, że kolizje się nie zdarzą. Dobieramy też model danych do charakteru odczytów i zapisów: inny magazyn sprawdza się dla profilu gracza, inny dla strumienia zdarzeń z rozgrywki, a jeszcze inny dla analityki. Ta decyzja rzutuje na koszt i skalowalność przez cały cykl życia gry.

Jak skalować backend na premiery i peaki ruchu?

Premiera to moment, w którym backend albo udowodni swoją wartość, albo trafi na nagłówki z powodu awarii. Skalowanie projektujemy tak, żeby system sam reagował na obciążenie, a nie czekał na ręczną interwencję w środku nocy. W praktyce łączymy kilka mechanizmów:

Osobno planujemy pojemność serwerów gry, bo tych nie da się skalować w nieskończoność w sekundę. Liczy się tu wcześniejsze przygotowanie puli i test obciążeniowy odwzorowujący skok z premiery.

Jak zadbać o obserwowalność i niezawodność?

Nie da się utrzymać backendu gry, którego nie widać. Dlatego od początku wpinamy metryki, logi i trace’y, a nie dokładamy ich po pierwszej awarii. Interesuje nas nie tylko to, czy usługa żyje, ale też jak długo trwa matchmaking, ile sesji się nie zestawiło i gdzie rośnie opóźnienie.

Niezawodność budujemy przez odcinanie uszkodzonych ścieżek, zanim pociągną za sobą resztę systemu. Projektujemy usługi tak, żeby awaria leaderboardu nie przewróciła matchmakingu, a chwilowy problem z jedną zależnością nie kaskadował na całą grę. Do tego dochodzą alerty oparte o realne odczucia graczy i regularne ćwiczenie scenariuszy awarii.

Jakie kompetencje dostarczamy do backendu gry?

Nie obsadzamy projektu „na zapas”, tylko dobieramy ludzi pod konkretną architekturę. Do backendu gry najczęściej wnosimy:

To jest sedno naszej oferty na tym etapie: dostarczamy kompetencję, a nie gotowy, cudzy tytuł. Nasi inżynierowie pracowali z AWS i Kubernetesem przy rozproszonych systemach o dużej skali, także w gamingu.

Jak robimy to w RITS?

Działamy jako partner nearshore z Polski, który wzmacnia Twój zespół kompetencjami zamiast przejmować produkt. W praktyce:

Robimy to najczęściej w modelu wzmocnienia zespołu lub zespołu dedykowanego, a przy budowie od zera jako dedykowane oprogramowanie współtworzone przez naszych ludzi.

Od czego zacząć budowę backendu gry?

Zacznij od najcięższej ścieżki w Twojej grze i od pytania, jaki ruch musi ona udźwignąć w szczycie. Zwykle jest to matchmaking albo zapis stanu gracza, i to one wyznaczają architekturę, model danych oraz role, których potrzebujesz w zespole. Mając to, łatwiej zdecydować, co budujesz sam, a co warto wzmocnić z zewnątrz, co opisaliśmy w artykule o modelach współpracy IT.

Budujesz backend gry i potrzebujesz ludzi, którzy robili to na AWS i Kubernetesie? Porozmawiajmy, dobierzemy kompetencje pod Twój projekt.

Zbuduj backend gry z naszym zespołem