Skaalautuva peliserveri

Muu yhteisön välinen keskustelu.
Post Reply
User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Skaalautuva peliserveri

Post by Sami The Great »

Hei! Sain tässä hommaksi suunnitella ja toteuttaa uuteen peliimme multiplayer systeemin.. Aikasempaa kokemusta on ainoastaan systeemistä, jossa on yks serveri ja siihen liittyy muutama client. Nyt pitäis saada tehtyä systeemi, joka skaalautuu isommaksi pelaajamäärän noustessa eli teoriassa pitäis pystyy hostaamaan 1 tai 100 000 pelaajaa samanaikasesti. Jos jollakulla on aikasempaa kokemusta serveri-systeemistä, joka koostuu monesta komponentista, niin arvostaisin, jos vois jakaa vähän tietoa. Postasin vähän laajemman selityksen mun suunnitelmista GameDeviin (löytyy vain huonolla englannilla): http://www.gamedev.net/topic/659343-sca ... er-system/
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
Pettis
The Evil Admin
The Evil Admin
Posts: 1044
Joined: Sun Aug 26, 2007 5:08 pm
Location: Rovaniemi
Contact:

Re: Skaalautuva peliserveri

Post by Pettis »

Useampi serveri-instanssi, jotka käyttävät samaa persistenttiä datastoragea, esimerkiksi.
CB Repository .com - Sinne ne kaikki koodit menneet on!
MunVerkko - Ilmaisia foorumeita ja blogeja
mikeful
Moderator
Moderator
Posts: 523
Joined: Mon Aug 27, 2007 8:36 pm
Location: Vaasa, Finalnd
Contact:

Re: Skaalautuva peliserveri

Post by mikeful »

Itsellä on kokemusta pääasiasssa nettipalvelujen rakentamisesta ja pyörittämisestä, mutta suunnitelma näyttää ihan fiksulta yleisellä tasolla.

Minecraftillla oli aika pitkään erillinen login-server, mutta siitä alkoi jossain välissä loppua puhti ja se oli jatkuvasti palvelunestohyökkäysten kohteena. Login serveritkin olisi siis hyvä laittaa useampana versiona load balancerin taakese.

Mietin myös onko frontend-servereitä ja peliserveritä tarpeellista pilkkoa erikseen, jos pelaajat matchataan jo omalla(/omilla) servereillä ja tiedot kuitenkin menee tietokantaan talteen. Eri rooleissa olevia servereitä voisi yrittää yhdistää, jos mahdollista.
Pelejä: Pelasta puhe, Grinder
Muuta: Blogi, Twitter
User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Re: Skaalautuva peliserveri

Post by Sami The Great »

Jees kiitos vastauksista! Olen saanut nyt vähän palautetta ja konsultaatiota systeemistä ja teen tosiaan muokkauksen niin, että login servut pilkotaan myös osiin samoin kuin kaikkiin muihinkin (message, global event ja lobby) tehdään ominaisuus, joka mahdollistaa useamman saman palvelun ajamisen systeemissä. Uusin ideani on, että teen ns. master serverin, johon kaikki muut serverit yhditää käynnistyessään. Master serveri pystyisi kertomaan muille palvelimille, jos verkkoon liittyy uusi palvelin, jolloin systeemiin pystyisi ajon aikanakin lisäämään ja postamaan osia.

Suurin ongelmani on tällä hetkellä global event serveri, jonka pitäisi pystyä päivittämään ajastimia. Idea on tällä hetkellä sellainen, että jos pelaajan jokin asia menee cooldownille, tallennetaan databaseen kellon aika, jolloin cooldownin on määrä loppua ja global event server tarkistaa pelaajan kirjautuessa onko aika mennyt jo umpeen ja päivittää tilanteen. Ongelmana on kuitenkin, jos pelaaja on online-tilassa, jolloin ajastinta pitäisi pystyä päivittämään joka sekunti, joka aiheuttaa erittäin monta kyselyä databaseen.
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Skaalautuva peliserveri

Post by Latexi95 »

Sami The Great wrote: Suurin ongelmani on tällä hetkellä global event serveri, jonka pitäisi pystyä päivittämään ajastimia. Idea on tällä hetkellä sellainen, että jos pelaajan jokin asia menee cooldownille, tallennetaan databaseen kellon aika, jolloin cooldownin on määrä loppua ja global event server tarkistaa pelaajan kirjautuessa onko aika mennyt jo umpeen ja päivittää tilanteen. Ongelmana on kuitenkin, jos pelaaja on online-tilassa, jolloin ajastinta pitäisi pystyä päivittämään joka sekunti, joka aiheuttaa erittäin monta kyselyä databaseen.
Ei kai se kysely olisi kovin paha, jos eventit olisi järjestetty ajan mukaan, niin että nopeasti voi ottaa vaan pinon päältä niin monta eventiä kuin on tarvis. Ja jos tähän databaseen tekee muokkauksia vain yksi serveri niin se voisi pitää kirjaa mihin aikaan seuraava eventti laukeaa, jolloin se voisi tehdä kyselyn ainoastaan silloin kun oikeasti tarvitsee. Käytännössä siis silloin pelaajien tavarat päivittyisivät myös kun ne on offline (tai sitten offlinessa olevien pelaajiin kohdistuvat laukeavat ajastetut eventit voisi siirtää laukeamisen aikaan toiseen kantaan listaan, josta ne prosessoitaisiin vasta kun pelaaja kirjautuu sisään. En ole kyllä varma, mitä hyötyä tästä saataisiin käytännössä).
Pettis
The Evil Admin
The Evil Admin
Posts: 1044
Joined: Sun Aug 26, 2007 5:08 pm
Location: Rovaniemi
Contact:

Re: Skaalautuva peliserveri

Post by Pettis »

Oikeastaan yksi loistava tapa on lähtä miettimään, että miten toteuttaisit palvelun Amazonin EC2-palvelun päälle. Tarvittaessa voit sen jopa siellä testatakin.

Amazonin EC2-koneet ovat koneita, jotka sammuessaan hävittävät kaiken tiedon. Ne spawnataan tarpeen mukaan (kontrolloit tätäkin itse). Ne voi kuitenkin tehdä siten, että asennat omat sovellukset niihin ja asetat ne käynnistymään kun palvelin starttaa (image). Voit sitten eri tarpeisiin tehdä eri imageja ja ajaa näitä tarpeen mukaan. Kuitenkin minimissään yksi kappale.

Omien palveluiden erikoistuminen eri palvelimille voi olla ihan järkevää. Sinulla voi olla esimerkiksi login-serveri, joka luo istunnon memcached-palvelimelle, joka säilyttää kaikki istunnot. Login-serverillä ei tarvitse olla kummoset speksit, mutta esim. memcached-palvelimet voivat olla vaikkapa klusteri palvelimia tai sitten yksi palvelin järkyttävällä määrällä muistia (olettaen että pelaajia ja session dataa on paljon).

Sitten itse pelipalvelimet käpistelevät esimerkiksi eri alueita ja sisältävät alueen kaikki pelaajat. Toinen vaihtoehto on että ne jakavat saman tilanteen ja päivittävät tilannetta esimerkiksi memcached-palvelimelta tulevalla datalla. Pysyvä data sitten tallennetaan johonkin erilliseen tietokantaan, jossa on tärkeää olla hyvä levy-io ja muistia reilusti. Pelipalvelimissa luonnollisesti verkko, latenssi ja suorituskyky ovat tärkeitä. Eri koneiden välillä tulee olla erittäin nopea verkkoyhteys, mielellään valokuitu.

Näin siis opitimimaailmassa.

Mutta todellisuudessa pelin hostaamiseen tarvittavat resurssit voivat olla vain yksi todella tehokas palvelin, joka hoitaa likimain kaiken, ehkä erotetulla tietokantapalvelimella.
CB Repository .com - Sinne ne kaikki koodit menneet on!
MunVerkko - Ilmaisia foorumeita ja blogeja
Post Reply