Miért csúsznak el a backend becslések?
„Mennyibe kerülne a játékunk backendje?” – jogos kérdés, de amíg néhány dolog nincs leírva, nincs rá őszinte válasz. Két stúdió ugyanazokat a szavakat használhatja – lobby, fiókok, dedikált szerverek, LiveOps –, mégis olyan projektekre gondolnak, amelyek ráfordításban és havi infrastruktúra-költségben nagyságrendekkel eltérnek egymástól.
Egy becslés akkor válik félrevezetővé, amikor a hiányzó információt csendben feltételezésekkel tölti ki. Ha a briefből nem derül ki, ki üzemelteti a szervereket a launch után, az egyik partner egy átadást áraz be, a másik egy év supportot. Ha nincs külön választva a meccsenkénti játékosszám és az egyidejű felhasználók száma, az egyik ajánlat egyetlen szerverfolyamatra méretez, a másik egy teljes flottára. Mindkét szám pontosnak tűnik, de egyik sem a te projektedet írja le.
Ez a cikk sorra veszi azokat az információkat, amelyek a leggyakrabban változtatják meg egy játék backend becslését – abban a sorrendben, ahogy szerintünk a legkönnyebb meghatározni őket. A végén találsz egy kitölthető brief táblázatot és egy rövid ellenőrzőlistát, amelyet érdemes lefuttatnod, mielőtt bármelyik partnernek – akár nekünk – elküldöd az anyagot.
Ha még magáról a hálózati modellről sem döntöttél (authority, dedikált vagy listen szerver, predikció), kezdd azzal, hogyan érdemes megtervezni egy multiplayer játék architektúráját. A backend scope ezekre a döntésekre épül.
1. Írd le a játékot és a játékos útját
A játékossal kezdj, ne a technológiával. Írd le lépésről lépésre, mit csinál a játékos a játék indításától a session végéig:
- Bejelentkezik, vagy anonim módon játszik?
- Partyban csatlakozik a barátaihoz, szerverlistából választ, vagy egyetlen „Play” gombot nyom meg?
- Mennyi ideig tart egy tipikus session vagy meccs, és mi történik a végén?
- Minek kell megmaradnia, amikor legközelebb elindítja a játékot?
- Mi történik, ha meccs közben megszakad a kapcsolata?
Ez a folyamat a leghasznosabb bemenet, amit egy backend fejlesztő kaphat, mert minden lépéshez vagy kell egy szolgáltatás, vagy tudatosan nem kell. Egy kooperatív játék, ahol négy barát egymás sessionjéhez csatlakozik, egészen más úton viszi be a játékost a meccsbe, mint egy kompetitív shooter, ahol a rendszer idegeneket párosít skill és régió szerint. A leírt folyamat a hibaállapotokat is felszínre hozza – tele szerver, verzióeltérés, megszakadt kapcsolat –, amelyekhez definiált viselkedés kell, vagyis ráfordítás.
2. Húzd meg a határt a realtime szerver és a backend között
Az online játékok általában több rétegből állnak: a játékkliens, a meccset szimuláló realtime game szerver, a sessionöket, játékosokat és tartós adatokat kezelő alkalmazásszolgáltatások, egy adatbázis és a monitorozás, amely megmutatja az üzemeltetőknek, mi történik. A becslés erősen függ attól, hol húzod meg köztük a határokat.
Hasznos kérdések:
- Melyik állapot authoritative a meccsen belül, és él csak a meccs végéig?
- Milyen adatnak kell túlélnie a meccset, és ki írja – a game szerver, a kliens vagy egy szolgáltatás?
- Van egyáltalán dedikált szerver, vagy egy játékos, illetve egy relay hosztolja a sessiont?
- Kié most a realtime netcode, és benne van-e a scope-ban?
Gyakori meglepetésforrás, ha „a backendet” egyetlen dolognak tekinted. A meccsen belüli netcode munka (authority, predikció, replikáció) és a meccs körüli szolgáltatások (sessionök, telepítés, perzisztencia, monitorozás) más szaktudást igényelnek, és érdemes külön becsülni őket, akkor is, ha ugyanaz a partner csinálja mindkettőt.
3. Sorold fel, milyen szolgáltatásokra van valóban szükséged
Készíts egy egyszerű listát a szükséges szolgáltatásokról, és mindegyiket jelöld így: launchra kell, később kell vagy nem kell. Tipikus jelöltek:
- Session létrehozás, lobbyk, partyk és szerverallokáció
- Dedikált szerver build, konténerizálás és telepítés
- Verziózott szerződések a kliens és a backend között
- Játékosfiókok és hitelesítés
- Progresszió, inventory és játékon belüli gazdaság
- Analitika és LiveOps eszközök
- Monitorozás, logok, riasztások és incidens runbookok
Minden tételnél írd oda, hogy egy meglévő platformszolgáltatásra számítasz, vagy szerinted egyedi szolgáltatás kell. Egy bevált platformszolgáltatás integrálása általában kisebb munka és olcsóbb üzemeltetni, mint újraépíteni, de a döntés a session modelltől, az adatoktól és a költségkeretektől függ – egy felmérési lépés még az implementációs becslés előtt eldöntheti.
Különösen a fiókoknál, a progressziónál, a gazdaságnál és a LiveOpsnál légy egyértelmű. Ezek biztonsági, adatvédelmi és balanszolási felelősséggel járnak, és a scope-juk jobban szór, mint a backend bármely más részéé. Egy egysoros „kell egy gazdaság” jelenthet egy pénzszámlálót, de egy teljes katalógust is vásárlásokkal, jóváírásokkal, visszagörgetéssel és csalásmegelőzéssel. Mindegyiket külön scope-olt tételként kezeld, ne egy kipipálható sorként.
4. Perzisztencia és adatmodell
Mindennek, aminek túl kell élnie a sessiont, kell egy hely, egy gazda és egy életciklus. A becslés előtt a partnernek tudnia kell:
- Mit tárolsz: profil, feloldott tartalmak, inventory, meccseredmények, beállítások, felhasználói tartalom.
- Ki írja: egy megbízható game szerver, egy backend szolgáltatás vagy a kliens (ez olcsóbb megépíteni, de sokkal nehezebb megbízni benne).
- Milyen gyakran: egyszer a meccs végén, minden felvett tárgynál vagy folyamatosan.
- Mi nem veszhet el és nem duplikálódhat soha, például a megvásárolt tárgyak.
- Személyes adatok: mit gyűjtesz, hol tárolható, és hogyan kezeled a törlési kérelmeket.
- Migráció: van-e meglévő játékosadat, amelyet át kell költöztetni vagy kompatibilisen kell tartani?
Az írási gyakoriság és a bizalom az a két válasz, amely a legjobban megváltoztatja a becslést. A meccs végén szerver által írt adat szerény követelmény; az az adat, amelyet a kliens bármikor módosíthat, validációt, ütközéskezelést és audit trailt igényel.
5. Külső integrációk
Minden külső rendszer olyan munkát hoz, amelyet könnyű alábecsülni: dokumentáció olvasása, a hibamódjainak kezelése, tesztelés a sandboxában és a változásainak követése. Sorold fel az integrációkat a céljukkal együtt:
- Platform- és storefront-szolgáltatások (identitás, barátlista, jogosultságok)
- Meglévő backend platformok vagy játékszolgáltatások, amelyekért már fizetsz
- Hosting szolgáltatók és szerver-orchestration
- Fizetési, analitikai, crash reporting, ügyfélszolgálati vagy anti-cheat eszközök
- A saját meglévő szolgáltatásaid, ha vannak
Jelöld, melyik eldöntött és melyik nyitott. A „sessionökre már az X szolgáltatást használjuk” tervezési munkát spórol meg, de integrációs korlátokat hoz; a „még nem választottunk hostot” egy értékelési lépést tesz hozzá.
6. Terhelési feltételezések: játékosszám sessionönként, CCU és kérésterhelés
Itt keverednek össze a becslésekben a leggyakrabban három különböző szám. Mindegyik a költség más részét mozgatja, ezért külön add meg őket – tartományként és forgatókönyvekként, ne egyetlen számként.
A sessionönkénti játékosszám azt mutatja, hányan játszanak egy meccsben vagy szobában. Ez a realtime szimuláció költségét határozza meg: CPU és memória szerverfolyamatonként, sávszélesség meccsenként, és hogy mennyi optimalizálásra van szüksége a netcode-nak. Ez nagyrészt designdöntés. A Bad Goonsnál, a saját fejlesztés alatt álló multiplayer shooterünknél a 64 játékos design cél: alakítja az architektúrát, de nem mért kapacitás.
Az egyidejű felhasználók száma (CCU) azt mutatja, hányan vannak online ugyanabban a pillanatban az egész játékban. A sessionönkénti játékosszámmal együtt ez határozza meg, hány szerverfolyamatnak kell párhuzamosan futnia – vagyis a hosting költséget, az allokációs logikát, a skálázási szabályokat és azt, milyen gyorsan kell a flottának reagálnia a csúcsokra. Ez piaci feltételezés, és általában ez a brief legbizonytalanabb száma.
A backend kérésterhelés azt mutatja, hány hívást indítanak a kliensek és a game szerverek a backend szolgáltatások felé, és ezek hogyan sűrűsödnek. Nem csak a CCU-tól függ, hanem a folyamattól is: bejelentkezések csúcsidőben, matchmaking kérések, meccs végi írások, inventory frissítések, újracsatlakozási hullám egy kiesés után. Ez határozza meg az adatbázis- és szolgáltatáskapacitást, a rate limiteket és a cache-elést.
Szemléltető példa (nem projektreferencia): két hasonló CCU-val számoló játéknak egészen eltérő backendje lehet. Az elsőben a játékosok hosszú sessionöket töltenek kis co-op szobákban, és a backendet főleg a session elején és végén hívják. A másodikban rövid kompetitív meccsek érnek véget egyszerre sok szerveren, és mindegyik eredményeket és inventory változásokat ír. A második játék sokkal nagyobb nyomás alá helyezi a szolgáltatásokat és az adatbázist, pedig a CCU szám ugyanannak látszik.
Azt is írd le, mit vársz a terheléses teszteléstől. Egy partnernek a te játékodra szabott terhelési forgatókönyveket kell definiálnia, lemérnie őket, és beszámolnia az eredményekről és a korlátokról – nem pedig olyan egyidejű játékosszámot ígérni, amelyet soha senki nem tesztelt.
7. Rendelkezésre állás és hibakezelési elvárások
A „mindig elérhetőnek kell lennie” nem becsülhető követelmény. Légy konkrétabb:
- Mely régiókat kell kiszolgálni, és ott számít-e a késleltetés a játékmenetben?
- Elfogadható-e karbantartási ablak, és hogyan kerülnek ki új verziók, miközben meccsek futnak?
- Mit tapasztaljon a játékos, ha egy szolgáltatás leáll – hibaüzenetet, várósort, offline játékot?
- Milyen gyorsan és milyen időszakban kell valakinek reagálnia egy incidensre?
- Van-e fix dátumú launch, playtest vagy esemény?
A rendelkezésre állás minden szintje redundanciát, tesztelést és üzemeltetési folyamatot tesz hozzá. A válaszokból az is kiderül a partner számára, hogy a graceful shutdown, a verzió-rollout és a rollback csak hasznos extra vagy launch-feltétel.
8. Átadás és üzemeltetés
A backend nem ér véget ott, ahol a kód működik. Valakinek telepítenie kell, figyelnie és reagálnia a problémákra. Határozd meg:
- Kié a hosting és felhőfiókok, a számlázás és a játékosadatok (általában a tiéd, ügyfélként).
- Ki üzemelteti a szolgáltatásokat az átadás után – a csapatod, a partner egy külön support megállapodás keretében, vagy vegyesen.
- Milyen dokumentációt vár a csapatod: architektúra és szerződések, telepítési lépések, runbookok a gyakori incidensekhez, ismert korlátok, az infrastruktúra költségtényezői.
- Milyen tudás van már a csapatodban, például Linux, konténerek vagy a választott felhőszolgáltató.
Ha folyamatos supportra számítasz, annak scope-ja és válaszideje a briefbe tartozik. Különben az egyik becslés csendben tartalmazza, a másik nem. Hogy mit tartalmaz egy teljes szerverátadás, azt a dedikált szerverek átadási ellenőrzőlistájában írtuk le.
Hogyan közelítjük meg ezeket a kérdéseket
A dokumentált production munkánk a backendnek a meccshez legközelebb eső részein a legerősebb: session- és lobbyintegráció, dedikált szerverek telepítése, kliens–backend szerződések, monitorozás és átadás. A Bad Goons Unity headless buildeket futtat authoritative Linux szervereken, konténerizált telepítéssel, és ez a fegyelem – reprodukálható buildek, health checkek, logok, biztonságos verzió-rollout – formálja a fenti kérdéseket. A CTO-nk korábbi, VR Storm Studio-s szerepében fejlesztette a Bean stalker megjelenés utáni co-op módjához a Photon-alapú multiplayer backendet.
A fiókokat, a progressziót, a gazdaságot és a LiveOpsot projektenként scope-oljuk és mérjük fel, azzal kezdve, hogy illik-e egy meglévő platformszolgáltatás. Ha kulcsfontosságú feltételezések még nyitottak, az őszinte első lépés általában egy behatárolt felmérés, nem pedig egy teljes implementációs becslés. Hogy ez mit fed le, a játék backend fejlesztés oldalunkon találod.
Backend brief sablon
Másold át ezt a táblázatot a saját dokumentumodba, és válaszolj, amire tudsz. A „nem tudjuk” is érvényes válasz – megmutatja a partnernek, hol kell felmérés.
| Terület | Kérdés | Miért változtatja meg a becslést | A te válaszod |
|---|---|---|---|
| Scope | Mit csinál a játékos az indítástól a session végéig? | Minden lépéshez vagy kell szolgáltatás, vagy tudatosan nem kell. | |
| Scope | Mely szolgáltatások kellenek launchra, később, vagy egyáltalán nem? | Meghatározza a szállítási scope-ot és a mérföldkövek sorrendjét. | |
| Realtime határ | Dedikált szerver, listen szerver vagy relay? Kié a netcode? | Eldönti, hogy a szerverbuild, a telepítés és a netcode benne van-e a scope-ban. | |
| Realtime határ | Mely állapot él csak a meccsben, és mi marad meg tartósan? | Meghatározza az adatmodell méretét és a rétegek közötti szerződéseket. | |
| Szolgáltatások | Mely meglévő platformszolgáltatásokat használod vagy értékeled? | Az integráció általában kisebb, mint az egyedi fejlesztés, de korlátokat hoz. | |
| Adatok | Mit tárolsz, ki írja, milyen gyakran? | Az írási gyakoriság és a bizalom határozza meg a validációs, tárolási és tesztelési munkát. | |
| Adatok | Milyen személyes adatot gyűjtesz, és hol tárolható? | Adatvédelmi, törlési és hosting-régió követelményeket ad hozzá. | |
| Adatok | Van meglévő játékosadat, amelyet migrálni kell? | A migráció és a kompatibilitás külön munkatétel. | |
| Integrációk | Milyen platform-, storefront-, fizetési, analitikai vagy egyéb rendszerek érintettek? | Minden integráció dokumentációs, hibakezelési és tesztelési munkát hoz. | |
| Terhelés | Játékosszám sessionönként (tartomány)? | A szerverfolyamatonkénti szimulációs költséget és a meccsenkénti sávszélességet határozza meg. | |
| Terhelés | Várt CCU (alacsony, várt és csúcs forgatókönyv)? | A párhuzamos szerverek számát, a hosting költséget és a skálázási logikát határozza meg. | |
| Terhelés | Mikor és milyen gyakran hívják a kliensek és a szerverek a backendet? | A szolgáltatás- és adatbázis-kapacitást, a rate limiteket és a cache-elést határozza meg. | |
| Rendelkezésre állás | Régiók, karbantartási ablakok, rollout futó meccsek mellett? | A redundanciát, a rollout eszközöket és a tesztelési munkát határozza meg. | |
| Rendelkezésre állás | Mit lásson a játékos, ha egy szolgáltatás hibázik? | Meghatározza a hibakezelést a kliensben, a szerveren és a szolgáltatásokban. | |
| Felelősségek | Kié a hosting fiók, a számlázás és a játékosadat? | Tisztázza a beállítási munkát és a hozzáférési igényeket. | |
| Felelősségek | Ki üzemelteti a backendet az átadás után, és milyen válaszidővel? | A becslésben elválasztja a szállítást a folyamatos supporttól. | |
| Átadás | Milyen dokumentációra és tudásra van szüksége a csapatodnak? | Meghatározza a runbookok, a betanítás és az átadás mélységét. | |
| Keretek | Fix dátumok, jelenlegi engine és szerver stack, költségkeret? | Alakítja a csapatot, a sorrendet, és hogy felméréssel kell-e kezdeni. |
Becslési ellenőrzőlista
Mielőtt bármelyik partnernek elküldöd a backend briefet, ellenőrizd, hogy tartalmazza-e:
- A játékos útját az indítástól a session végéig, a kapcsolatvesztéssel és a hibákkal együtt.
- A határt a realtime game szerver és a backend szolgáltatások között, és hogy kié a netcode.
- A szolgáltatások listáját launch / később / nem kell jelöléssel – a fiókokat, a progressziót, a gazdaságot és a LiveOpsot külön-külön scope-olva.
- Mi tárolódik tartósan, ki írja, milyen gyakran, és milyen személyes adatok érintettek.
- Minden külső integrációt, eldöntött vagy nyitott jelöléssel.
- A sessionönkénti játékosszámot, a CCU-t és a backend kérésterhelést külön, tartományként vagy forgatókönyvként.
- A rendelkezésre állási elvárásokat: régiók, karbantartás, rollout és hibaviselkedés.
- A fiókok és adatok tulajdonjogát, az átadás utáni üzemeltetést és az elvárt átadást.
- A fix dátumokat, a meglévő stacket és a költségkeretet.
Ha több válasz még „nem tudjuk”, írd le nyugodtan. Az a partner, aki egy rövid felmérést javasol a hiányok lezárására, hasznosabb számot ad, mint aki ennek ellenére beárazza a teljes projektet. Ha kész a briefed, elküldheted nekünk.