Il presente articolo è stato tradotto automaticamente.

Windows Azure Insider

Soddisfare le esigenze dei giochi moderni con Windows Azure

Bruno Terkaly
Ricardo Villalobos

Bruno Terkaly, Ricardo VillalobosQuesto articolo descrive il servizio Windows Azure Cache, che è in anteprima. Informazioni sono soggette a modifiche.Giochi online, mobile e sociali hanno preso il mondo dalla tempesta, con impressionanti numeri relativi ai giocatori simultanei, tempo trascorso giocando e scaricato le applicazioni. Solo recentemente, Facebook condiviso che un terzo della sua globale degli utenti (260 milioni) gioca attivamente sui propri siti di computer desktop e portatili. Questo è solo un indicatore degli sviluppatori di giochi particolari sfide e case editrici hanno a faccia — sfide che includono gli utenti giocando lo stesso gioco su più piattaforme e dispositivi, i giocatori in attesa di ricevere notifiche istante quando lo stato del loro gioco basato sul tempo è cambiato, giochi andando da avvio a virale in pochi giorni e cercando di raggiungere un pubblico in più sedi in tutto il mondo.

Per fortuna, il cloud pubblico offre una serie di alternative per affrontare queste situazioni, permettendo di concentrarsi sullo sviluppo di applicazioni di gioco e non su come effettuare il provisioning dell'infrastruttura per supportare l'autenticazione, informatica, requisiti dati o supporti. In questo articolo, esploreremo come risolvere questi e altri scenari comuni, utilizzando i più recenti servizi di Windows Azure e i componenti.

Figura 1 Mostra una tipica architettura a sostegno di giochi multiplayer per client mobili nel cloud, sia per gli scenari di turni o in tempo reale. I diversi componenti sono assegnati i compiti più comuni necessari per costruire un gioco back-end, introducendo il concetto di un orchestrator o proxy, che agisce come gateway o traffico controller per tutte le interazioni client con più servizi.

Software Architecture for Real-Time, Multiplayer Games for Mobile Clients
Figura 1 architettura di Software per giochi in tempo reale, Multiplayer per client mobili

Nei paragrafi seguenti, daremo un'occhiata più da vicino ciascuno di questi componenti.

Server di gioco multiplayer (infrastruttura come una macchine virtuali di servizio)

Server di gioco multiplayer sono di solito basato su opensource o concessi in licenza quadri, agendo come la fonte più autorevole degli eventi per i client collegati ad essi e fornendo informazioni sugli altri giocatori che hanno aderito al server stesso tramite chiamate a bassa latenza. Queste strutture richiedono stateful interazioni con i clienti, così come accedere alla memoria locale, rendendo le macchine virtuali (VM) in Windows Azure la scelta perfetta per questo componente. Alcuni esempi di questi quadri di server di gioco sono pomelo (bit.ly/1i9heBe), Marauroa (bit.ly/am9MOi) e Server di fotone (exitgames.com).

Per distribuire qualsiasi di questi quadri per macchine virtuali, è possibile creare istanze della galleria di immagine di Windows Azure nel portale di gestione (bit.ly/197eXED), oppure direttamente creare immagini personalizzate VM come file VHD (Hyper-V) (bit.ly/PQso1a).

Tenete a mente che l'implementazione di un server di gioco può trasformarsi in un processo complesso che richiede di trovare soluzioni per la compensazione della rete-lag e per correttamente utilizzando protocolli di comunicazione (ad esempio TCP o UDP) per ottimizzare la comunicazione con i clienti.

Gioco Orchestrator o Proxy (piattaforma come un servizio Cloud Services)

Il cuore della soluzione è l'orchestratore di gioco o proxy, che offre molteplici servizi, tra cui le seguenti:

  1. Autenticazione: Convalida delle credenziali inviate dai clienti prima che i giocatori possono connettersi al server di gioco.
  2. Matchmaking: Assegnando i giocatori con preferenze simili sullo stesso server di gioco. La decisione potrebbe essere guidata anche da posizione, per ridurre la latenza.
  3. Proxy di dati: Servire le richieste di gioco dal server di gioco o i clienti; interagendo con l'archiviazione esterna; e invio dati retrospettivi come partiture storiche, informazioni sul profilo, preferenze o saldo attivo.
  4. Provisioning: Aumentando o diminuendo il numero di macchine virtuali, utilizzando un approccio di scalabilità basato sul numero di giocatori collegati.
  5. Notifiche: Interagendo con il servizio di notifica per informare i giocatori dello status del gioco quando non sei online. Questo dovrebbe sostenere più piattaforme (Windows, Android, iOS) e tipi di dispositivo.
  6. Delegazione: Orchestrare l'interazione con i servizi esterni, compreso ma non limitato all'invio di messaggi di posta elettronica, elaborazione dei pagamenti e registrare le informazioni di giochi.

Servizi Cloud di Windows Azure è il candidato perfetto per l'orchestratore di gioco, che deve essere in grado di maniglia apolide richieste, così come facilmente scala fuori sulla base del numero di richieste di server client e gioco. Inoltre, grazie ai vantaggi offerti dalle reti virtuali in Windows Azure, Cloud Services può comunicare direttamente con il server di gioco ospitato nelle macchine virtuali, aggiungendo un ulteriore livello di sicurezza per l'architettura di non dover utilizzare endpoint esterno. Servizi cloud possono essere creati e distribuiti da idi differenti, tra cui Visual Studio per lo sviluppo .NET o Eclipse per Java. Ulteriori informazioni sulla creazione di servizi Cloud possono essere trovati alla bit.ly/19MYq5A. Se si desidera collegare le macchine virtuali e servizi Cloud utilizzando virtual delle reti, il tutorial a bit.ly/GYcG5t può aiutare.

Le responsabilità appena discusse possono essere gestite da un singolo cluster di ruoli Web o lavoratore o Spalato in molti servizi Cloud, a seconda del numero di utenti simultanei e la complessità del gioco online. Uno dei vantaggi di che Windows Azure fornisce è più modelli di distribuzione, comprese le infrastrutture come Service (IaaS) o piattaforma come servizio (PaaS). Il fattore chiave di decisione è il numero di strati software delegata al fornitore nuvola — in questo caso, Microsoft. Ulteriori informazioni sulla scelta del modello di distribuzione e l'esecuzione di nuvola giusta possono essere trovati alla bit.ly/153kRXM.

Ora, esploreremo come la orchestrator può eseguire queste responsabilità con altri componenti della piattaforma Windows Azure.

Autenticazione (servizio di controllo di Windows Azure Active Directory Access)

Il primo passo di che un client mobile serve per accedere a una piattaforma multiplayer sta cercando di autenticare il server utilizzando un set di credenziali. Nel gioco moderno, è importante sostenere la convalida da più provider di identità, tenendo presente che gli utenti hanno preferenze diverse quando si tratta di sicurezza online. Alcuni potrebbero sentirsi più a suo agio utilizzando le credenziali di rete sociale, quali Facebook, Yahoo! o Twitter. Altri potrebbero preferire l'autenticazione fornito dal gioco stesso, basato su un framework come Active Directory.

Il servizio di controllo di accesso Windows Azure (ACS) offre un modo semplice per eseguire questa autenticazione. Esso supporta l'integrazione con Windows Identity Foundation; fornisce out-of-the-box compatibilità con Windows Live ID (un account Microsoft), Google, Yahoo! e Facebook; consente scenari basati su OAuth 2.0, WS-Trust e WS-Federation protocolli; e riconosce i formati di token Token JSON Web (JWT), SAML 1.1, SAML 2.0 e semplice Web Token (SWT).

In questo caso, il client di gioco ottiene un token di protezione rilasciato da ACS, al fine di accedere al server di gioco tramite il proxy di gioco. Questo token contiene un insieme di attestazioni circa l'identità dell'utente. ACS non rilascia un token a meno che l'utente prima dimostra un'identità valida presentando un security token da un'altra emittente o identità fornitore affidabile che ha autenticato l'utente. Questo processo è illustrato nel Figura 2.

The Authentication Process Using Windows Azure Access Control Service
Figura 2 il processo di autenticazione utilizzando il servizio di controllo di Windows Azure accesso

Matchmaking

In multiplayer dei giochi, il processo di assegnazione giocatori al server di gioco appropriato basato sulla loro preferenze o posizione viene chiamato matchmaking. Una volta che il client di gioco è stato autenticato, il proxy gioco restituirà un elenco di server di gioco di corrispondenza delle preferenze del giocatore, basate sul suo indirizzo IP, insieme con le credenziali di protezione aggiuntive nel caso in cui sono necessari dai server di gioco. La logica dietro l'assegnazione è solitamente basata su una lista di server consigliati in ogni datacenter archiviato in qualche tipo di meccanismo di caching. La ragione di memorizzazione nella cache è consigliato per questo è di prestazioni: evitando di andata e ritorno a storage primario migliora significativamente l'esperienza del giocatore. Windows Azure offre un nuovo servizio di cache (attualmente in anteprima) accessibili attraverso molteplici servizi e client. Questo nuovo servizio è una soluzione distribuita, in memoria, scalabile che consente di creare applicazioni altamente reattiva fornendo accesso super-veloce ai dati. È estremamente facile accesso dalle applicazioni .NET utilizzando il SDK corrispondente. Le istruzioni dettagliate si possono trovare presso bit.ly/15IltBt. Il processo di matchmaking restituirà l'indirizzo IP appropriato di server di gioco a cui deve connettersi al client di gioco.

Quando una sessione di gioco è stata finalizzata (sotto forma di una partita, combattimento, o semplicemente accedendo giocatore fuori dal gioco), i giocatori possono rimanere sullo stesso server o essere reindirizzati al processo di matchmaking, al fine di individuare un server diverso nel caso in cui le preferenze sono cambiati.

Dati Proxy (Windows Azure Storage)

Per i giocatori già connessi al server di gioco adeguata basata alle loro preferenze, richieste sulla configurazione del gioco, conservare l'equilibrio o altri dati relative all'utente vengono instradati attraverso il gioco orchestrator/proxy, che solitamente espone un'API con le più comuni operazioni contro un repository di dati. Ci sono due principali decisioni da prendere per questo: il meccanismo di archiviazione per le informazioni utente e gioco e il quadro per esporre i servizi che possono accedere al server di gioco.

Windows Azure offre molteplici opzioni per la memorizzazione di informazioni, che noi abbiamo descritto nei precedenti articoli. A seconda del numero e complessità delle query, la struttura dei dati e il livello di personalizzazione richiesto, è possibile scegliere tra la tradizionale repository relazionale come Database SQL di Windows Azure o NoSQL approcci come tabella di archiviazione Windows Azure (bit.ly/YrYcQP).

Indipendentemente dalla selezione repository, servizi di fronte a queste informazioni devono essere esposte in modo riposante, utilizzando il framework quali Windows Communication Foundation (WCF) o il recente rilasciato ASP.NET Web API (/asp.net web api). Questi quadri possono essere distribuiti ai servizi cloud o macchine virtuali.

Windows Azure offre anche un servizio chiavi in mano che combina la potenza di un database relazionale nel cloud con un API REST robusto e flessibile. Si chiama Windows Azure servizi Mobile, ed è un modo semplice per accelerare lo sviluppo di questo pezzo di architettura gaming, con procedure guidate facili da seguire e le funzionalità di ridimensionamento automatico. Ulteriori informazioni su questo servizio possono essere trovati nella nostra colonna di novembre 2012, "Windows Azure servizi mobili: Un robusto Back-End per applicazioni dispositivo"(msdn.microsoft.com/magazine/jj721590), o sulla pagina ufficiale di Windows Azure (bit.ly/188Llcg).

Esecuzione del provisioning

Il gioco orchestrator/proxy può anche agire come il motore di provisioning o ridimensionamento automatico per aggiungere o rimuovere server di gioco come sono necessari. Tuttavia, si noti che Windows Azure offre le funzionalità di ridimensionamento automatico per tutti i modelli di distribuzione diversi, tra cui macchine virtuali, siti Web e servizi Cloud.

Notifiche

Giocatori utilizzando dispositivi mobili si basano sulla ricezione di notifiche quando sono offline, particolarmente per i giochi a turni o basati sul tempo che richiedono mantenendo proprietà virtuali o elementi aggiornati (un concetto che è stato fatto estremamente comune di giochi come FarmVille). Si faccia due principali problemi durante l'invio di notifiche mobile Gamers: Dovendo raggiungere i giocatori utilizzando diverse piattaforme sui propri dispositivi mobili e costruire e mantenere un'infrastruttura in grado di raggiungere milioni di utenti. Fortunatamente, Windows Azure offre un servizio chiamato notifica mozzi, che fornisce un'API comune per inviare le notifiche push per una varietà di piattaforme mobili, tra cui Windows Store, Windows Phone, iOS e Android. Allo stesso tempo, le notifiche push vengono inviate a milioni di utenti in pochi minuti, non ore. Figura 3 Mostra un frammento di codice in c# che invia una notifica semplice per applicazioni sia Windows Store e iOS utilizzando categorie multiple.

Figura 3 invio di notifiche di Windows Store e iOS applicazioni utilizzando Windows Azure notifica mozzi

private static async void SendNotificationAsync()
{
  NotificationHubClient hub =
    NotificationHubClient.CreateClientFromConnectionString(
      "<connection string with full access>", "<hub name>");
  var categories = new string[] { "World", "Politics", "Business",
     "Technology", "Science", "Sports"};
  foreach (var category in categories) {
    var toast = @"&lt;toast&gt;&lt;visual&gt;&lt;binding template ="
      "ToastText02""&gt;&lt;text id=""1""&gt;" + "Breaking " +
      category + " News!" + 
      "&lt;/text&gt;&lt;/binding&gt;&lt;/visual&gt;&lt;/toast&gt;";
    await hub.SendWindowsNativeNotificationAsync(toast, category);
    var alert = "{\"aps\":{\"alert\":\"Breaking "+ 
      category +" News!
\"}}";
    await hub.SendAppleNativeNotificationAsync(alert, category);
  }
}

Delega di responsabilità ad altri servizi (SMTP, commercio)

Il gioco orchestrator/proxy dovrebbe agire anche come gateway per l'accesso di altri servizi, quali motori per l'invio di messaggi e-mail massiccia tramite SMTP o elaborazione delle immagini di giochi in tempo reale. Windows Azure Store consente di rapidamente scoprire, acquistare ed eseguire il provisioning di applicazioni da altri partner Microsoft. Questi servizi possono essere combinati con i componenti di Windows Azure per costruire giochi complessi o aggiungere funzionalità non supportate nativamente dalla piattaforma di cloud. Ulteriori informazioni su Windows Azure Store e un catalogo di servizi sviluppatore possono essere trovati alla bit.ly/1carBrd.

Gioco di analisi e dati Big

Raccolta, analisi e reporting dei dati raccolti dal server di gioco è fondamentale per trovare i colli di bottiglia, migliorando le prestazioni di gioco e, per la monetizzazione e la pubblicità degli scopi, determinare le aree dove i giocatori passano il loro tempo. Windows Azure consente di utilizzare un approccio di MapReduce, chiamato HDInsight, come un servizio che permette l'installazione semplice, semplice di cluster Hadoop. In alveare oppure strumenti anche noti come Microsoft Office, è possibile creare grafici e report ricco. Ulteriori informazioni su questo componente possono essere trovati nella nostra colonna di settembre 2013, "Hadoop e HDInsight: Big Data in Windows Azure"(msdn.microsoft.com/magazine/dn385705).

Il confezionamento

Noi abbiamo solo scalfito la superficie su come creare soluzioni scalabili e ricchi per l'industria di gioco mobile dalla combinazione di più componenti della piattaforma Windows Azure, per soddisfare le esigenze e requisiti creati da social network e l'enorme numero di giocatori che sono attratti da queste applicazioni. Il cloud pubblico offre un modello di ripartizione flessibile, che consente alle aziende di ogni dimensione competere in questo spazio.

Bruno TerkalyLa sua profonda competenza deriva da anni di esperienza nel campo, scrivendo codice utilizzando una moltitudine di piattaforme, linguaggi, framework, SDK, librerie e API. Dedica il suo tempo a scrivere codice, a pubblicare post su blog e a tenere presentazioni sulla creazione di applicazioni basate su cloud, nello specifico utilizzando la piattaforma Windows Azure blogs.msdn.com/b/brunoterkaly

Ricardo Villalobos è un progettista software condito con più di 15 anni di esperienza di progettazione e creazione di applicazioni per le aziende in più settori. Possesso di certificazioni tecniche diverse, come pure un Master in business administration presso l'Università di Dallas, lavora come un architetto di nuvola nel team DPE globalmente impegnati partner per Microsoft, aiutando le aziende a livello mondiale per implementare soluzioni in Windows Azure. Si può leggere il suo blog a blog.ricardovillalobos.com.

Terkaly e Villalobos congiuntamente presenti a grandi conferenze di settore. Incoraggiano i lettori di Windows Azure Insider a contatto con loro per la disponibilità. Terkaly può essere raggiunto a bterkaly@microsoft.com e Villalobos può essere raggiunto a Ricardo.Villalobos@microsoft.com.

Un ringraziamento al seguente esperto tecnico per la revisione dell'articolo:: Kevin Ashley (Microsoft)
Kevin Ashley lavora in Microsoft come architetto e technical evangelist. È un autore di Professional Windows 8 programmazione: Sviluppo di applicazioni in c# e XAML libro e top apps per Windows e Windows Phone. Kevin lavora con start-up e partner, consulenza in materia di strategia di design, business e tecnologia software. Prima di Microsoft, è stato dei fondatori di una nube della presto-fase e avvio software di business intelligence. Nel suo ruolo di sviluppatore software senior e architetto, Kevin ha sviluppato la griglia, immagazzinamento di dati e soluzioni di trading in tempo reale per aziende Fortune 500 e hedge fund nel mondo: Stati Uniti, Regno Unito, Europa e Asia. Kevin ha lauree in matematica, informatica e MBA in finanza. Blog di Kevin: http://kevinashley.com e Twitter: @kashleytwit