Creëer bijna-realtime services
Om de beste gebruikerservaring met Riot en Xbox Game Pass te bieden, wilden we dat spelers direct nieuwe in-game content konden ontgrendelen nadat ze hun actieve Xbox Game Pass-account hadden gekoppeld, wat veel vindingrijkheid vereist. Het Content Experience-team werkt samen met het Accounts-team (binnen het Player Platform) en sluit zich aan bij accounts die een bericht sturen naar de Riot Event Bus (Riot’s nieuwste op berichten gebaseerde communicatiebenadering) telkens wanneer een speler een Xbox-account koppelt of ontkoppelt. Zodra het bericht is ontvangen, kan de service die naar de thread van de berichtenmakelaar luistert, reageren en de gebeurtenis verwerken. Aangezien het voor een speler mogelijk was om zijn Xbox-account aan Riot te koppelen zonder Game Pass te activeren, zou het team ook de Xbox API voor deze informatie moeten opvragen met behulp van het token dat wordt geleverd door accountkoppeling, waarbij het accountteam het token opslaat in een nieuwe dienst. Dit lost echter nog steeds slechts een deel van het probleem op, aangezien we nog steeds moeten controleren of de speler een actief Xbox Game Pass-account heeft.
Het Content Experiences-team (onderdeel van het Player Platform) heeft een Gateway Subscription Service (GSS) gebouwd die fungeert als de enige bron van waarheid, binnen Riot, voor de Game Pass-status van een speler, voor elke beller. Dit betekent dat elke keer dat de service moet controleren op op abonnementen gebaseerde inhoud, ze contact kunnen opnemen met GSS en een antwoord met lage latentie en hoge nauwkeurigheid krijgen over de voordelen die de speler zou moeten hebben. GSS verkrijgt gegevens door accountkoppelingsgebeurtenissen van accounts te gebruiken en de Microsoft API te gebruiken om te controleren of spelers een actieve Game Pass-status hebben. Het stelt deze gegevens bloot aan andere Riot-services via een HTTP API-eindpunt, zodat andere teams deze informatie kunnen gebruiken voor verschillende gebruiksscenario’s, waaronder:
-
Content Access Platform: voegt bepaalde op abonnementen gebaseerde inhoud toe aan de inventaris van spelers
-
Martech: toon specifieke advertenties op basis van de huidige Game Pass-status van een speler
-
Spelersondersteuning: PS-agenten gebruiken de informatie om spelerstickets met betrekking tot Xbox-abonnementen te verwerken
-
Web Experience (WebEx): Bekijk de abonnementsstatussen van spelers op de Gamer Account Management-webpagina
Wanneer een speler zijn Riot-account koppelde aan zijn Xbox Game Pass-account, vroeg GSS de Microsoft Xbox API om de Game Pass-status van de speler te verkrijgen met behulp van het token van de accountkoppeling, die informatie op te slaan in een permanente database, deze regelmatig bij te werken en beschikbaar te maken voor bevraging via Geef toegang tot de client via de API. Lijkt eenvoudig genoeg, toch?
Een speler kan Game Pass op elk moment activeren na het koppelen van zijn Riot + Xbox-account. De service kan alleen regelmatig de Xbox API opvragen om te controleren of de speler een actieve status heeft. Om de beste spelerservaring te bieden, wilden we dat spelers direct na het koppelen en activeren van Game Pass toegang hebben tot abonnementscontent, dus de mogelijkheid om regelmatig te zoeken was essentieel. Maar hoe vaak is het genoeg? Elke minuut zou geweldig zijn geweest, maar het is geen goede gewoonte om elke minuut miljoenen verzoeken op een API te doen om de status te controleren, vooral wanneer er 99% geen statusverandering is tussen oproepen.
Het team concentreerde zich op gevallen waarin ze konden reageren op interacties met spelers aan de Riot-kant, zoals wanneer een speler de gameclient startte, omdat het een goed moment zou zijn om de Game Pass-status bij te werken. De vernieuwing is echter een externe HTTP-aanroep die ongeveer 1 seconde duurt en de belangrijkste GSS-client, Content Access Platform (CAP), retourneert de gevraagde antwoorden in minder dan 50 ms omdat het deel uitmaakte van het tijdkritische pad om de inventaris van de speler op te halen . Er was geen manier om een extern gesprek van 1 seconde om te zetten in 50 ms, dus het team moest creatief zijn. Ze besluiten om de momenteel opgeslagen waarde te retourneren die is verkregen van de vorige update of oorspronkelijk na accountbinding en het uitvoeren van een asynchrone update op de backend als de opgeslagen waarde meer dan 2 minuten geleden is verkregen. Als de Service na deze asynchrone update een wijziging in de status van Game Pass ziet, stuurt deze een bericht via de Riot Messaging Service naar de gameclient zodat de game rechten kan ophalen van de CAP en er tegelijkertijd voor zorgt dat de speler zijn abonnementsinhoud krijgt zonder dat u de client handmatig opnieuw hoeft te laden.
Dus ons belangrijkste doel was om de responstijd zo veel mogelijk te verkorten, omdat we zeer strikte tijdsvereisten hebben. Het duurt in principe 50 ms voordat CAP contact met ons opneemt en het antwoord krijgt of de speler een actieve Game Pass-status heeft of niet, wat ons bijna een service in de tijd. Feitelijk in die zin. Als we niet binnen die tijd reageren, zal CAP effectief ophangen en dat kan ertoe leiden dat spelers niet de inhoud krijgen die ze zouden moeten krijgen. ”
– Vasili Katrev
Wild Rift gebruikt geen CAP-systeem voor de inventaris van zijn spelers, dus ze moeten de abonnementsservice rechtstreeks bestellen als de speler een actief Game Pass-abonnement heeft. Om aan de latentievereiste van 50 ms te voldoen, heeft Content Experience zijn diensten gebundeld met CAP- en accountbeheerdiensten in vier datacenters over de hele wereld om zo dicht mogelijk bij onze spelers te zijn.
Een alternatieve oplossing voor het donker opstarten en starten van de database
Slechts enkele dagen voordat spelers werden geïntroduceerd, voerde het team een donkere lancering uit om de koppeling tussen Riot-accounts en Xbox Game Pass te testen. Ze ontdekten verschillende kritieke bugs en repareerden deze vóór de lanceringsdag.
Een grote zorg was hoeveel gebruikers de Entitlements-service laadden, die ervoor zorgt dat spelers toegang krijgen tot items in alle games van Riot. Rechten ontvangen een groot aantal leesverzoeken – tot wel 800.000 per minuut op sommige sites! Om voordelen voor spelers te ontgrendelen, lanceerde elke oproep voor rechten nu een volgende oproep naar een ander systeem om te controleren of de speler een Game Pass had, voordat de Game Pass-voordelen werden verzameld en teruggegeven aan de speler. De extra stress en complexiteit die deze stroom veroorzaakte, veroorzaakte risico’s van onbetrouwbaarheid en vertraagde reacties met een verscheidenheid aan stroomafwaartse effecten.
Het team testte verschillende scenario’s, maar wist dat een donkere lancering hen het meeste vertrouwen zou geven om te verifiëren dat ze een robuust systeem hadden. Door de donkere lancering konden ze “het systeem in volle gang activeren” om te voorkomen dat alleen Xbox Game Pass-inhoud voor spelers verschijnt. Ze waren in staat om te zien onder welke druk het systeem zou komen te staan en het exacte gedrag te verwachten vóór de officiële lancering. Met een donkere lancering ontdekten ze een fout in de configuratie van de verbindingspool die mogelijk zou kunnen leiden tot een mislukte lancering waarbij spelers hun voordelen niet kunnen krijgen.
Het team had ook een probleem met de schrijfcapaciteit van onze database – de huidige architectuur *verhinderde dat ze deze konden schalen om rekening te houden met de toegenomen spelersbelasting tijdens de lancering van onze samenwerking. Een gebruikelijke manier om de belasting van een service als deze te beheren, is door de toegang in golven te spreiden. Het team besloot te proberen de stroom spelers onder controle te houden door de marketing te vertragen tot meerdere beats. Dit zal golven van spelers over een langere periode verspreiden, en het team kan ervoor zorgen dat ze voldoende capaciteit hebben om elke nieuwe golf van spelers te bedienen terwijl het meer marketingmateriaal publiceert. Door nauw samen te werken met marketing konden ze het onder de 50% van de schrijfcapaciteit houden.
* Sindsdien hebben we onze technische database-stack gewijzigd om meer horizontale schaling te hebben voor accountwijzigingen.
“Organisator. Denker. Schepper. Communicator. Twitter-liefhebber. Vriendelijke koffiemedewerker. Wannabe-analist. Tv-evangelist.”