MMORPG, niektóre MOBA, takie jak League of Legends, a nawet StarCraft 2 zazwyczaj zmuszają cię do wybrania serwera. Zazwyczaj są to USA, UE i SEA, w MMORPG wiele na lokalizację. Widzę, że było to konieczne kilka lat temu, ale teraz wraz z pojawieniem się AWS i podobnych ofert, które pozwalają płynnie skalować „moc serwera”, dlaczego wciąż istnieją osobne serwery?
Mój tok myślenia jest taki (na przykładzie Star Wars: The Old Republic): - Zawsze jesteś na jednej planecie, odizolowanej „instancji” od innych planet. - Jeśli na jednej planecie jest zbyt wielu ludzi, SW: TOR tworzy nową instancję świata i umieszcza w niej graczy. - Jeśli opuścisz instancję world / switch, pojawi się ekran ładowania
Dlaczego więc gra nie może stworzyć instancji dla tej planety? Ta instancja (i tylko ta) ma twoje bieżące dane w swojej bazie danych i zarządza x odtwarzaczami. Jak tylko gracze x-50 znajdą się w tej instancji, zostanie uruchomiony nowy serwer i pojawią się nowe osoby w tej instancji. 50 miejsc jest zarezerwowanych na przejście do twojej grupy itp.
Może istnieć instancja dla wszystkich trzech głównych regionów, aby utrzymać niskie opóźnienie, ale pozwoliłoby ci nadal grać z innymi graczami z np. SEA, jeśli możesz żyć z opóźnieniem 140 ms (co nadal nie jest niczym).
Za każdym razem, gdy zmieniasz instancję lub podróżujesz do innego świata, twój obecny serwer przekazuje wszystkie dane do następnego serwera, upewniając się, że nie potrzebujesz jednej dużej scentralizowanej bazy danych. Nadal możesz mieć taki, który okresowo pobiera aktualizacje do celów analizy.
Gdy się wylogujesz lub serwer utraci połączenie, dane mogą być następnie przesłane do ogromnej bazy danych zoptymalizowanej do przechowywania danych. Serwery instancji można następnie zoptymalizować pod kątem wysokiej przepustowości.
Czy jest jakiś konkretny powód, dla którego to nie zadziała? Czy brakuje mi innych problemów?
źródło
Odpowiedzi:
AWS nie jest tak oczywistym rozwiązaniem, jak się wydaje. Może to być kosztowne, w niektórych przypadkach nawet bardziej niż korzystanie z wewnętrznych centrów danych (dla wydawcy ich koszty mogą być amortyzowane na przykład dla wielu produktów). Ponadto mogą pojawić się obawy związane z przechowywaniem wrażliwych plików binarnych i dzienników na sprzęcie poza kontrolą użytkownika. Wreszcie faktyczna moc obliczeniowa nie zawsze jest przyczyną segregacji populacji „serwerów” w MMO.
W rzeczywistości Guild Wars 2 robi coś bardzo podobnego do tego. Mapy są symulowane przez poszczególne procesy serwera, a wystąpienia przepełnienia są tworzone w razie potrzeby na podstawie ograniczenia liczby ludności mapy i pewnej heurystyki dla wydajności mapy.
W Guild Wars 2 znajdują się dwa główne centra danych, jedno w USA i jedno w Europie - między tymi centrami danych istnieje pewna rozmowa (głównie dla systemów handlu pocztowego i systemów handlowych), ale ogólnie istnieją one w tej konfiguracji, więc gracze Niemcy, Francja i tak dalej nie muszą cierpieć z powodu większych opóźnień w stosunku do amerykańskich serwerów gier. W centrum danych gracze są podzieleni na „światy domowe” (lub „odłamki” w języku narodowym); ale jednym z powodów jest to, aby zminimalizować liczbę graczy, których klient może zobaczyć i musi im zgłosić. Aspekt tego problemu po stronie klienta nie zostanie rozwiązany poprzez skalowanie do większej liczby urządzeń serwerowych. Kombinatoryczna eksplozja po stronie serwera dodatkowych ścieżek raportowania może być,
Brakuje ci kilku rzeczy, ale są to w większości szczegóły (i nie wyjaśnię, jak sobie z nimi radzimy, ponieważ są uważane za tajemnice handlowe), które nie są istotne w przypadku tak wysokiego poziomu pytania o charakterze ogólnym. Myślę, że największą wadą twojej propozycji jest przekazanie danych gracza nowemu serwerowi, gdy gracz dokonuje transferu. Jest to złożony problem, który nie będzie dobrze skalowany, prawdopodobnie w praktyce lepiej jest mieć dane tego gracza na scentralizowanym systemie serwerów. Jest to całkiem wykonalne, jeśli nie korzystasz z tych baz danych i podstawowego magazynu rekordów środowiska wykonawczego dla danych.
źródło
Głównie chodzi o opóźnienie.
Po pierwsze, bliskość geograficzna serwera ogranicza czas oczekiwania. Jeśli serwer znajduje się po drugiej stronie świata, zobaczysz więcej opóźnień niż w przypadku, gdy serwer znajduje się zaledwie kilka kroków od nas.
Po drugie, usługi takie jak AWS nie są przeznaczone do pracy w czasie rzeczywistym. Zostały zaprojektowane z myślą o dużej przepustowości kosztem niewielkich opóźnień. Jeśli jedna strona wczytuje się o 250 ms dłużej niż zwykle, nikogo to nie obchodzi, ale jeśli twoja gra potrzebuje 250 ms dłużej niż zwykle na przetworzenie wiadomości, może to poważnie wpłynąć na rozgrywkę. Właśnie dlatego MMO prawie zawsze są hostowane na dedykowanym sprzęcie.
Ale dotyczy to również projektowania gier. Jeśli sprawiasz wrażenie, jakby wszyscy byli w tym samym świecie, ale musieli podzielić strefę, gdy się zapełni, ludzie denerwują się, że nie mogą znaleźć przyjaciół w wyznaczonych miejscach spotkań. Tego rodzaju problem dotyczyłby gildii, masowych bitew PvP itp. Gracze są przyzwyczajeni do instancji w tych dniach, ale istnieją pewne obszary, które powinny być udostępniane. Jeśli masz całkowicie oddzielne serwery, to przynajmniej nie ma tu niespodzianek.
Wreszcie należy rozważyć inne kwestie technologiczne. Nawet jeśli każda instancja jest dość odizolowana od innych, zwykle nadal istnieją różne usługi, które muszą się przez nie komunikować. Komunikacja między serwerami jest trudna w oprogramowaniu czasu rzeczywistego i doprowadziła do różnych exploitów i błędów w MMO. W szczególności przekazywanie wiarygodnych danych graczy między nimi jest ryzykowne. Dlatego programiści często mylą się po stronie ostrożności i wyraźnie wyznaczyli granice między serwerami, zmniejszając ruch, który musi je przekroczyć.
źródło
tak naprawdę uważam, że odpowiedź nie jest związana z siecią lub architekturą, ale raczej z grami, zwykle w tego typu grach są wydarzenia, a wydarzenia te są ustalane według najbardziej dogodnych ram czasowych dla osób grających na serwerze, i to zwykle związane ze strefą czasową, w której mieszkają ludzie, a więc UE i USA itp.
Innym powodem jest utworzenie separacji między światami, aby grupa, która jest zbyt silna, nie zepsuła gry dla wszystkich graczy i zawsze mogła przenieść się do świata mniej „wymagającego”.
Po stronie możliwości procesora serwera, chociaż dzisiejsze maszyny są dość mocne, zawsze istnieje ograniczenie tego, co może obsługiwać jedna maszyna, dlatego tworzenie separacji między światami jest konieczne, aby chronić grę przed przeciążeniem i pozwolić ludziom wybrać, który świat chcą grać, aby mogli bawić się z przyjaciółmi. Skalowanie w poziomie nie jest tylko kwestią posiadania maszyn, potrzebujesz aplikacji, aby móc pracować w architekturze skalowanej w poziomie, a to nie jest takie łatwe, gdy masz tysiące „akcji”, które mogą zachodzić jednocześnie i mogą na siebie wpływać, oraz trzeba zsynchronizować wszystko. Myślę, że byłoby to bardzo trudne na kilku komputerach.
źródło
Co jest nie tak z automatycznym uruchamianiem? Kiedy lokalizacja jest zbyt zaludniona, wystarczy umieścić 1000 graczy w 10 różnych instancjach.
Problem polega na tym, że w grach online chodzi o społeczność. Wyobraź sobie, że umówiłeś się na spotkanie z ludźmi, których spotkałeś wcześniej, a kiedy wszyscy jesteście w danym czasie, nie widzicie się, ponieważ wszyscy jesteście w różnych sytuacjach? To denerwujące i przełamuje zanurzenie.
Jak można temu zapobiec? Można to zrobić, umieszczając każdego gracza w tej samej instancji przez cały czas, dzięki czemu gdy spotkasz innego gracza raz, możesz być pewien, że spotkasz go ponownie, gdy oboje znajdziecie się w tym samym miejscu. Nigdy nie spotkasz graczy przypisanych do innych instancji.
Ale co, jeśli chcesz poznać kogoś spoza gry? Jak prawdziwy przyjaciel, którego zaprosiłeś do wspólnej gry? Aby to umożliwić, będziesz musiał wybrać instancję podczas tworzenia swojej postaci. Jak z listy instancji z łatwymi do zapamiętania nazwami. Niestety nazwa „instancja” wydaje się myląca dla przeciętnego użytkownika. Nie są przyzwyczajeni do tego słowa. Czy nie byłoby lepiej używać terminu, do którego są przyzwyczajeni? Termin jak ... Serwer ?
źródło