Nedostupnost online hraní D2R

Situace s Diablo II: Resurrected je prakticky od vydání bezútěšná. V některých denních hodinách se prakticky nedá připojit na Online. Co se děje?

Blizzard o situaci ví, pravidelně vydává patche, které by měly odlehčit serverům, ale zlepšení je naprosto minimální. Co se v zákulisí děje? O tom se rozepsal komunitní manažer PezRadar.

Zdravím všechny,

Od spuštění Diablo II: Resurrected se potýkáme s problémy na serverech. Chtěli bychom být transparentní v tom, co způsobuje tyto problémy, a co jsme doposud udělali, abychom se s nimi vypořádali. Taktéž vám chceme říct, co nás brzy čeká.

TL;DR: Problémy se servery nezpůsobuje jediná věc; každý jednotlivý problém řeší tak, jak přijde a to jak okamžitými řešeními, tak dlouhodobými změnami architektury. Malý počet hráčů přišel o progres postavy. Od této chvíle by se v případu pádu server mělo jednat o ztrátu maximálně několika minut. Není to pro nás konečné řešení, a stále na tom děláme. Náš tým s pomocí ostatních z Blizzardu dělá na tom, aby zážitek ze hry byl skvělý pro všechny stejně.

Teď se trochu ponoříme do technických detailů, ale doufáme, že vám to pomůže pochopit, proč se tyto problémy dějí, co děláme, abychom každý z nich vyřešili, ale také to, jak hledáme příčinu problému. Ale hezky popořadě.

Problémy se servery

Dříve než se pustíme do tohoto tématu, musíme vám říct, jak fungují naše databáze. Zaprvé, máme globální databázi, která slouží jako jediný správný zdroj pro všechny informace o vašich postavách a jejich progresu. Jak vám může dojít, pro jednu databázi je to hodně práce. Takže abychom jí ulehčili, každý region (NA, EU, Asie) má vlastní databázi a ta pravidelně zapisuje do do globální databáze. Většina herních akcí je zapisována do regionální databáze, jelikož je rychlejší, vaše postava je uzamčena v této regionální databázi, aby byla uchována integrita. Globální databáze má zálohu pro případ, že havaruje.

Abychom vám mohli vysvětlit, co se děje, zaměříme se na výpadky mezi 9. říjnem a 15. říjnem.

V sobotu ráno pacifického času jsme byli svědky výpadku kvůli obrovskému nárůstu v přenosu dat. Něco tak velkého naše servery nezažily, a to ani při startu. To bylo umocněno aktualizací vydanou předchozí den. Tato aktualizace měla vylepšit vytváření her. Kombinace těchto dvou faktorů přetížila naši globální databázi a ta přestala odpovídat. Proto jsme se rozhodli udělat rollback páteční aktualizace doufaje, že do neděle odlehčí servererům a nám to dá čas detailněji prošetřit, co se stalo.

V neděli bylo jasné, že sobotní řešení nebylo dostatečné. Přenos dat byl mnohem vyšší, což způsobilo další výpadek. Herní servery byly odpojovány od databáze a snažily se opětovně připojit zpět. Dababáze v podstatě nikdy neměla čas zpracovat to, co jsme udělali, jelikož muse odbavovat nekonečné pokusy o znovupřipojení herních serverů. Během této doby jsme ovšem přišli na to, že můžeme vylepšit konfiguraci logování eventů, abychom mohli obnovit stav databáze v případě pádu. Když toto bylo hotové, dále jsme hledali příčinu.

Nedělní řešení nám dalo do ruky informace o tom, jak rychle obnovit hru. Což bylo dobré. Ale bohužel to mělo i stinnou stránku. Když rychle obnovíme hru během exponovaných hodin, během několika málo minut jsou vytvořeny stovky tisíc her a servery spadnou. Což je špatně.

Museli jsme nasadit spoustu oprav, včetně konfiguračních a oprav kódu, prvně jsme je tedy nasadili na záložní globální databázi. V pondělí jsme prohodili záložní databázi s hlavní. To vedlo v další výpadek, jelikož záložní databáze trpěla chybou, běžel na ní proces zálohování, to znamená, že se většinu doby snažila zkopírovat data z hlavní databáze místo toho, aby obsluhovala požadavky ze serverů. Objevili jsme další problémy, udělali další opravy. Našli jsme zastaralé, ale stále aktivní databázové dotazy, jenž jsme eliminovali. Optimalizovali jsme různé kontroly postav, když se připojili do hry, čímž jsme nadále ulevili serverům. Dělali jsme další vylepšení a testování. Věříme, že se nám povedlo vyřešit síťové problémy při připojování do databází, jelikož jsme je neviděli od úterý.

V úterý přišel další zásah v podobě rekordu současněhrajících hráčů, jednalo se o stovky tisíc lidí v jednom jediném regionu. To mělo další neblahý vliv, databáze trpěla sníženým výkonem. Na tom v tuto chvíli pracují databázoví inženýři. Taktéž spolupracujeme s dalšími inženýry z Blizzardu na drobných opravách, jeden tým pracuje na hlavních serverech. Kontaktovali jsme i dodavatele služeb, aby nám poskytli pomoc.

Proč se toto děje

Abychom zůstali co nejvíc věrní původní hře, zachovali jsme většinu původního kódu. Bohužel, jedna původní služba má problémy vyrovnat se s tím, jak se v současnosti hráči chovají.

Tato služba, s drobnými vylepšeními, řeší kritické části herní funkcionality, konkrétně vyváření her/připojování se do her, aktualizace/čtení/filtrování herního seznamu, verifikace výkonu serverů, načítání postav z databáze, aby zkontrolovala, zda se postava může účastnit čehokoliv, co hledáte. Důležité je, že tato služba je „singleton,“ to znamená, že může běžet jen jedna instance této služby, aby bylo zajištěno, že všichni hráči vidí v kteroukoliv chvíli nejaktuálnější seznam her. Tuto službu jsme několikrát optimalizovali, aby vyhovovala moderním technologiím, ale jak bylo dříve řečeno, mnoho problémů pochází z vytváření her.

Zmínili jsme „současné chvání hráčů,“ jelikož je to zajímavá věc, o které musíme přemýšlet. V roce 2021 nebylo na internetu tolik informací o tom, jak hrát Diablo 2 „správně,“ např. Baal runs na XP, Pindleskin/Ancient Sewers na Magic Find atd. Dnes si nováček může najít desítky úžasných tvůrců obsahu, kteří je mohou naučit hrát Diablo mnoha způsoby. Mnoho z nich navádí hráče vytvářet/načítat/rušit hry v rychlém sledu, což vede k velkému zatížení databáze. Do jisté míry jsme po beta testu měli nějaká očekávání, ale hrubě jsme je podcenili.

Další věcí je, že jsme moc často ukládali do globální databáze. Není důvod to dělat tak často, jak jsme to dělali. Měli jsme ukládat do regionální databáze. Do globální pouze tehdy, pokud jsme vás potřebovali „odemknout.“ To je jedním z řešení, které nyní máme. Nyní píšeme kód, který toto chování kompletně změní, takže nebudeme muset téměř vůbec ukládat do globální databáze, což významně sníží zatížení serverů. Bohužel se jedná o redesign architektury, takže to bude nějaký čas trvat, a to včetně testů a implementace.

Ohledně ztráty progresu

Ztráta progresu, kterého byli někteří hráči svědkem, je způsobeno tím, jak uzamykáme postavu v regionální a globální databázi. V globální databázi uzamkneme postavu ve chvíli, když vám byl přiřazen region, např. když hrajete v US regionu, vaše postava je uzamčena na US regionu a většina věcí se děje v US regionální databázi.

Problém bylo, že pokud spadla databáze, spousta postav byla zaseknutá v regionální databázi a my neměli způsob, jak ji přenést do globální databáze. Věřili jsme, že máme dvě možnosti: Buď odemknout všechny neuložené změny v globální databázi a přijít o určitý progres, nebo shodit celou hru na určitý čas a spustit skript na zápis dat do globální databáze.

Tehdy jsme si mysleli, že je důležité udržet hru a nechat lidi hrát, než shodit na delší čas hru a obnovit data. Velmi nás mrzí, že hráči ztratili progres a cenné předměty. Sami jsme hráči a víme jak to bolí.

V tuto chvíli máme způsob, jak obnovit postavy aniž by došlo k významné ztrátě dat. Pokud dojde k pádu serveru, hráči by měli přijít maximálně o minuty progresu. Je to lepší, ale ne dokonalé.

Co budeme dělat

Omezení: Budeme omezovat počty operací s databází ohledně vytváření her a připojování do her. Je nám jasné, že to na mnohé bude mít dopad. Např. pokud děláte Pindleskin runy, jednu hru budete mít hotovou za 20 vteřin. V tuto chvíli dojde k omezení vašich akcí. Pokud se tak stane, na obrazovce vám vyskočí chybová hláška, ve které bude stát, že je problém v komunikaci s herními servery. Neznamená to, že jsou servery dole, jen to znamená, že budete omezeni, aby došlo ke snížení zátěže databáze. Je to daň za to, že online hra poběží dál. Nejedná se o trvalé řešení, je to jen dočasné.

Čekací fronta: Minulý víkend byl složen ze série problémů, nebyl to jeden neustále opakující se problém. Kvůli vysokému počtu hráčů, přidání několika platforem, se přidaly problémy se škálováním. Možná proto budeme svědky menších problémů. Abychom je mohli včasně diagnostikovat a vyřešit, je potřeba, aby se v jeden moment nepřihlašovalo obrovské množství hráčů. Takže se potkáte s čekáním ve frontě, tak jako tomu bylo například u World of Warcraft. To udrží počty lidí v bezpečných mezích, my budeme moct monitorovat, kde systémy selhávají a nastalé problémy řešit dříve, než hra spadne. Pokaždé, když takový problém vyřešíme, budeme moct zvýšit počty naráz hrajících lidí.

Rozdělení kritických částí do menších služeb: Na věcech, které zvládneme během jednoho dne, už děláme, něco už je hotové. Větší projekty jsou v plánu: Nové mikroslužby (např. GameList služba starající se o seznam her). Jakmile kritické části budou rozděleny na menší, budeme řešit škálovatelnost, to nadále sníží zatížení.

Na incidentech v reálném čase velmi tvrdě pracuje spousta lidí, diagnostikují problémy, aplikují opravy; Nejen D2R, ale i další týmy napříč Blizzardem. Tato hra pro nás mnoho znamená. Mnoho z nás hraje Diablo 2 od nepaměti, od spuštění v roce 2000, někteří jsou součástí modding komunity atd. Můžeme vás ujistit, že na hře budeme dělat tak dlouho, dokud nebudeme spokojení nejen my, ale i hráči a členové komunity.

Zdroj: Blizzard

Pokud jste z oboru, doporučujeme přečíst si originál. Překlad jsem se snažil udělat tak, aby jej pochopil i IT nepolíbený laik.

16 komentářů u „Nedostupnost online hraní D2R

  1. Zdravím, vyskytuje se mně na Lobby delší dobu pravidelně chybová hláška, pokud udělám s partou asi 2 baalruny.

    ..an issue occurred while communications with the game servers. Please check that you are connected to the internet and try again.
    ..došlo k problému při komunikaci s herními servery. Zkontrolujte, zda jste připojeni k internetu, a zkuste to znovu.

    Musím vyjet do klienta, protože na Lobby už nezaložím ani vlastní hru. Napadlo mne, že se jedná o nějakou ochranu proti botům, nebo je chyba jinde? Připojení mám určitě ok, protože když založím svoji hru, tak to neudělá nikdy. Dík za info.

  2. Už odemne budete mít pokoj. Ve dne ve frontě 278, o víkendu 499. Posledních asi 15 charmů GC, LC a SC, to je naprosto nepoužitelné. Mám dostatečné mf, ale na lvl87 padají GC 5% gold, sc 1 defe a podobné. Z Diabla padají jenom modré a bílé předměty, občas žlutý luk. S tímhle ať jdou do (_!_). Asi nechtějí, aby si lidi hráli nonlader a po spuštění laderu na ně kašlali. Zkusil jsem chytit se do dvou her a musel jsem dvakrát vyběhnout ze hry, zase to tam psalo, že později atd. Ta hra je totálně rozhozená a mrzí mě, že jsem to kupoval, .eru na ně, hezký den,.

    1. Já teda nevim, ale zas tak moc jsem tomu nedal a už mám několik high run, na sorcce víceméně full gear a na hammera mi chybí jen zaka.. pravda skiller mi nepadl ještě ani jeden, ale pár vita charmů už mám.. Poslední dobou už moc nehraju, je to hroznej stereotyp a člověk už zapomněl, kolik hodin drahocenného času tomu musí dát, aby se stal bohatým 😀

        1. V krávách mi vypadla akorát ist, pul, lem za cca 20 runů.. mf nemá vliv na drop run, takže když zabíjím krávy trochu přeházím gear do damage na úkor mf. Jinak jsem naprostou většinu získal prodejem předmětů dropnutých z mephista..ten se teď nějakou dobu nedal efektivně chodit, když nešlo zakládat hry rychleji po sobě.. jinak za normálních okolností jsem ho zabíjel tak 40-50x do hodiny.. bylo dobrý chytit začátek protože to měli některé věci nesmyslnou hodnotu, prodal jsem low shako za gul, oculusy jsem prodal dva za ist (někdo prodával i za vex) atd.. dali se ještě prodávat i krámy jako lidless wall za pul…to už ted nikdo nekoupí. MF nevím přesně nějak 400+, lvl 88

          1. ještě poznatek mám takový dojem že mf tvoje a mercova se nesčítá.. takže to aby třeba toho mephista dorazil merc není vhodné, protože má svoji mf.. Jinak ceny předmětů čekuji tak po různu, teď jsem si hodil do záložky tenhle odkaz https://www.purediablo.com/forums/threads/pricing-guide-for-d2r-non-ladder.1953/ beru to spíš orientačně, ceny se mění za pochodu.. je jasný, že věci pro kouzelnici a s magic findem jsou nejdražší na začátku sezony a třeba věci na bowazon neprodáš, to samé nikdo ti nedá na začátku ist za vita charm když potřebuje nejdřív oculus shako vipermagi/skullder, wtčka atd. Takže některé věci je lepši nechat v inventáři ležet a počkat až po nich stoupne poptávka.. ten obchod mě na týhle hře baví asi nejvíc.

          2. Dík za odpověď. Já se nemohu zbavit dojmu, že když jedu solo a nejedu lobby, že to padá podstatně lépe. Že mf nemá vliv na drop run, to se říkalo, tam je to o levelu, ale mf merce se sčítá, ale ruku do ohně za to nedám. V každém případě, nejlepší věci mně padly na NM, když se rozjela hra, možná se tam vrátím. Potom přišly nějaké patche a šlo to do kytek.
            Já mám lvl87 a jsem podle expe vlastně na začátku hry. No nic, občas mě to vytočí, ale pořád lepší, než TV seriály:)

          3. jestli chceš tak si mě přidej, občas by se hodil průtah druhé postavy – co poptávám to sám nabízím, nikdy nechci nic zadarmo. Kamarády to přestalo po chvíli bavit a začali hrát zase tanky… mildaCZ#2754 ve hře Atena a nebo Milgorn

Napsat komentář