Este artigo foi traduzido por máquina.

Windows Azure Insider

Atenda às demandas dos mais modernos jogos com o Windows Azure

Bruno Terkaly
Ricardo Villalobos

Bruno Terkaly, Ricardo VillalobosEste artigo descreve o serviço de Cache Windows Azure, que é na visualização. Informações estão sujeitas a alterações.Jogos on-line, móveis e sociais tomaram o mundo pela tempestade, com escalonamento números relativos aos jogadores simultâneos, tempo gasto jogando e baixei os aplicativos. Recentemente, o Facebook compartilhado que um terço de seu global (260 milhões) de usuários jogam ativamente em seus desktop e mobile sites. Este é apenas um indicador de desenvolvedores do jogo de desafios específicos e editoras têm a cara — desafios que incluem usuários jogando o mesmo jogo em múltiplas plataformas e dispositivos, jogadores esperando receber notificações instantâneas quando o status do seu jogo baseado em tempo mudou, jogos de inicialização para viral em questão de dias e tentar chegar a um público em vários locais ao redor do mundo.

Felizmente, a nuvem pública oferece uma série de alternativas para lidar com estas situações, permitindo-lhe concentrar-se no desenvolvimento de seus aplicativos de jogos e não sobre como configurar a infra-estrutura para oferecer suporte a autenticação, computação, requisitos de dados ou de mídia. Neste artigo, exploraremos como resolver estes e outros cenários comuns usando os componentes e serviços mais recentes do Windows Azure.

Figura 1 mostra uma arquitetura típica para suportar jogos multiplayer para clientes móveis na nuvem, também para cenários de turnos ou em tempo real. Os diferentes componentes são atribuídos às tarefas mais comuns necessárias para construir um jogo back-end, introduzindo o conceito de um orquestrador ou proxy, que funciona como o controlador de porta de entrada ou o trânsito para todas as interações do cliente com vários serviços.

Software Architecture for Real-Time, Multiplayer Games for Mobile Clients
Figura 1 arquitetura de Software para Jogos Multiplayer, em tempo real para clientes móveis

Nos parágrafos seguintes, levaremos uma olhada em cada um desses componentes.

Servidores de jogos multiplayer (infraestrutura como um serviço de máquinas virtuais)

Servidores de jogos multiplayer são geralmente baseados em código aberto ou licenciado quadros, atuando como a fonte autoritativa de eventos para os clientes conectados a eles e fornecendo informações sobre outros jogadores que se juntaram no mesmo servidor via chamadas de baixa latência. Essas estruturas requerem stateful interações com clientes, bem como acessem ao armazenamento local, tornando máquinas virtuais (VMs) no Windows Azure, a escolha perfeita para este componente. Alguns exemplos dessas estruturas de servidor do jogo são pomelo (bit.ly/1i9heBe), Marauroa (bit.ly/am9MOi) e servidor de fóton (exitgames.com).

Para implantar qualquer uma dessas estruturas para VMs, você pode criar instâncias da Galeria de imagem do Windows Azure no portal de gerenciamento (bit.ly/197eXED), ou diretamente criar imagens personalizadas do VM como arquivos VHD (Hyper-V) (bit.ly/PQso1a).

Tenha em mente que a implementação de um servidor do jogo pode se transformar em um processo complexo, exigindo-lhe inventar soluções para compensação de rede-lag e para corretamente usando protocolos de comunicação (como TCP ou UDP) para otimizar a comunicação com os clientes.

Jogo Orchestrator ou Proxy (plataforma como serviço Cloud Services)

O coração da solução é o orquestrador de jogos ou o proxy, que fornece vários serviços, incluindo o seguinte:

  1. Autenticação: Validando as credenciais enviadas pelos clientes antes que os jogadores podem se conectar aos servidores de jogo.
  2. Correspondência: Atribuindo os jogadores com preferências similares ao servidor do jogo mesmo. A decisão também pode ser conduzida pelo local, para minimizar a latência.
  3. Proxy de dados: Servindo no jogo solicitações de servidores de jogos ou os clientes; interagindo com o armazenamento externo; e envio de dados como notas históricas, informações de perfil, preferências ou saldo credor.
  4. Provisionamento: Aumentando ou diminuindo o número de VMs, usando uma abordagem de expansão com base no número de jogadores conectados.
  5. Notificações: Interagindo com o serviço de notificação para informar os jogadores do status do jogo quando eles não estão on-line. Isto deve suportar múltiplas plataformas (Windows, Android, iOS) e tipos de dispositivos.
  6. Delegação: Orquestrar a interação com serviços externos, incluindo mas não limitado ao envio de mensagens de e-mail, processamento de pagamentos e registrar informações de jogos.

Serviços de nuvem do Windows Azure é o candidato perfeito para o orquestrador de jogos, que deve ser capaz de identificador solicitações sem monitoração de estado, bem como facilmente dimensionamento com base no número de solicitações de servidor cliente e jogo. Além disso, graças aos benefícios oferecidos por redes virtuais no Windows Azure, serviços em nuvem pode comunicar diretamente com os servidores de jogo hospedados em VMs, adicionando uma camada extra de segurança para a arquitetura, por não ter que usar pontos de extremidade externos. Serviços em nuvem podem ser criados e implantados a partir de IDEs diferentes, incluindo o Visual Studio para desenvolvimento .NET ou Eclipse para Java. Mais informações sobre a criação de serviços de nuvem podem ser encontradas em bit.ly/19MYq5A. Se você deseja se conectar as VMs e serviços em nuvem usando virtual networks, o tutorial em bit.ly/GYcG5t pode ajudar.

As responsabilidades discutidas podem ser tratadas por um único conjunto de funções Web ou trabalhador, ou dividida em muitos serviços de nuvem, dependendo do número de usuários simultâneos e a complexidade do jogo online. Uma das vantagens que do Windows Azure fornece é vários modelos de implantação, incluindo a infra-estrutura como um serviço (IaaS) ou plataforma como serviço (PaaS). O fator de decisão-chave é o número de camadas de software delegada ao fornecedor nuvem — neste caso, a Microsoft. Mais informações sobre como escolher o modelo de implantação e execução de nuvem podem ser encontradas em bit.ly/153kRXM.

Agora exploraremos como organizador pode executar estas responsabilidades usando outros componentes da plataforma Windows Azure.

Autenticação (Windows Azure do Active Directory serviço de controle de acesso)

O primeiro passo que um cliente móvel leva para acessar uma plataforma multiplayer está tentando autenticar no servidor usando um conjunto de credenciais. Em jogos modernos, é importante apoiar a validação de vários provedores de identidade, mantendo em mente que os usuários têm preferências diferentes quando se trata de segurança on-line. Alguns podem sentir mais confortável usando as credenciais de rede social, tais como Facebook, Yahoo! ou no Twitter. Outros podem preferir autenticação fornecida pelo jogo em si, com base em um quadro como o Active Directory.

O serviço de controle de acesso do Windows Azure (ACS) oferece uma maneira simples de realizar essa autenticação. Ele suporta a integração com o Windows Identity Foundation; oferece compatibilidade com out-of-the-box com o Windows Live ID (uma conta de Microsoft), Google, Yahoo! e Facebook; permite cenários com base em OAuth 2.0, WS-Trust e WS-Federation protocolos; e reconhece formatos de token Token de Web de JSON (JWT), SAML 1.1, SAML 2.0 e Web simples Token (SWT).

Neste caso, o cliente obtém um token de segurança emitido pela ACS para logon para o servidor do jogo através do proxy de jogos. Esse token contém um conjunto de declarações sobre a identidade do usuário. ACS não emite um token a menos que o usuário primeiro prove uma identidade válida, apresentando uma segurança token de outro provedor confiável emitente ou identidade que autenticou o usuário. Este processo é ilustrado na Figura 2.

The Authentication Process Using Windows Azure Access Control Service
Figura 2 o processo de autenticação usando o Windows Azure Access Control Service

Matchmaking

Em jogos multiplayer, o processo de atribuição de jogadores para o servidor do jogo apropriado com base em suas preferências ou localização é chamado matchmaking. Uma vez que o cliente de jogo tiver sido autenticado, o proxy de jogos irá retornar uma lista de servidores de jogos combinando as preferências do jogador, baseadas no seu endereço IP, juntamente com as credenciais de segurança adicionais, caso forem necessários pelo servidor do jogo em si. A lógica por trás da atribuição baseia-se geralmente uma lista de servidores recomendados em cada data center que é armazenado em algum tipo de mecanismo de cache. O cache de razão é recomendado para isso é o desempenho: evitar ciclos de armazenamento principal melhora a experiência de gamer significativamente. O Windows Azure oferece um novo serviço de cache (atualmente na visualização) que pode ser acessado através de vários serviços e clientes. Este novo serviço é uma solução distribuída, na memória, escalável que permite a criação de aplicações altamente responsivos, fornecendo acesso super rápido aos dados. É extremamente fácil de acessar de aplicativos .NET usando o SDK correspondente. Instruções detalhadas podem ser encontradas no bit.ly/15IltBt. O processo de matchmaking retornará o endereço IP apropriado do servidor do jogo para que o cliente deve se conectar.

Quando uma sessão de jogo foi finalizada (sob a forma de uma luta, combate, ou simplesmente o efetuando jogador fora do jogo), os jogadores podem permanecer no mesmo servidor ou ser reencaminhados de volta para o processo de matchmaking, para localizar um servidor diferente, no caso de tem alterado as suas preferências.

Dados Proxy (Windows Azure Storage)

Para os jogadores já conectados ao servidor do jogo apropriado com base em suas preferências, as solicitações sobre a configuração do jogo, armazenar equilíbrio ou quaisquer outros dados relacionados ao usuário são roteados por meio do jogo orchestrator/proxy, que normalmente expõe uma API com as operações mais comuns com um repositório de dados. Existem dois principais decisões para isso: o mecanismo de armazenamento para as informações do usuário e jogo e o quadro para expor serviços que podem ser acessados pelos servidores do jogos.

O Windows Azure oferece várias opções para armazenar as informações, que nós já descrita em artigos anteriores. Dependendo do número e da complexidade das consultas, a estrutura dos dados e o nível de personalização necessário, você pode escolher entre repositórios relacionais tradicionais como Windows Azure SQL banco de dados ou NoSQL abordagens tais como armazenamento de tabela Windows Azure (bit.ly/YrYcQP).

Independentemente da seleção do repositório, serviços na frente esta informação devem ser expostos de forma RESTful, utilizando frameworks como o Windows Communication Foundation (WCF) ou o recém-lançado ASP.NET Web API (- api/web do asp.net). Esses quadros podem ser implantados para serviços em nuvem ou VMs.

O Windows Azure oferece também um serviço chave na mão que combina o poder de um banco de dados relacional na nuvem com uma API REST robusto e flexível. Chama-se serviços de Mobile do Windows Azure, e é uma maneira fácil de acelerar o desenvolvimento desta parte da arquitetura do jogo, com capacidades de escala automática e assistentes fáceis de seguir. Mais informações sobre este serviço podem ser encontradas em nossa coluna de novembro de 2012, "Windows Azure serviços móveis: Um robusto volta final para seus aplicativos de dispositivo"(msdn.microsoft.com/magazine/jj721590), ou na página oficial do Windows Azure (bit.ly/188Llcg).

Provisionamento

O jogo orchestrator/proxy também pode atuar como o mecanismo de provisionamento ou escala automática para adicionar ou remover servidores de jogo, conforme a necessidade. No entanto, observe que o Windows Azure oferece agora recursos de escala automática para todos os modelos de implantação diferentes, incluindo VMs, serviços em nuvem e Web sites.

Notificações

Os jogadores usando dispositivos móveis dependem receber notificações quando estão offline, particularmente por turnos ou baseados em tempo de jogos que exigem a manutenção de propriedades virtuais ou itens atualizados (um conceito que se tornou extremamente comum por jogos como FarmVille). Você enfrenta dois problemas principais ao enviar notificações para gamers móveis: tendo-se em contato com os jogadores usando as plataformas diferentes em seus dispositivos móveis e construção e manutenção de uma infra-estrutura capaz de atingir milhões de usuários. Felizmente, o Windows Azure oferece um serviço chamado Hubs de notificação, que fornece uma API comum para enviar notificações push para uma variedade de plataformas móveis, incluindo a loja do Windows, Windows Phone, iOS e Android. Ao mesmo tempo, as notificações push são enviadas para milhões de usuários em poucos minutos, não horas. Figura 3 mostra um trecho de código em c# que envia uma notificação simples a aplicativos Windows Store e iOS usando várias categorias.

Figura 3 notificações de envio a loja Windows e iOS aplicativos usando o Windows Azure notificação Hubs

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ção de responsabilidades para outros serviços (SMTP, comércio)

O jogo orchestrator/proxy também deve atuar como gateway para acessar outros serviços, tais como motores para envio massivo de emails via SMTP ou processamento de imagens de jogos em tempo real.O Windows Azure armazenamento permite que você rapidamente descobrir, adquirir e provisionar aplicativos de outros parceiros da Microsoft.Esses serviços podem ser combinados com componentes do Windows Azure para construir jogos complexos ou adicionar recursos que não são suportados nativamente pela plataforma de nuvem.Mais informações sobre o Windows Azure loja e um catálogo de serviços do desenvolvedor podem ser encontradas em bit.ly/1carBrd.

Jogo Analytics e grande volume de dados

Coletar, analisar e relatar dados reunidos a partir de servidores de jogo são crucial para encontrar pontos de estrangulamento, melhorando o desempenho no jogo e, para monetização e fins, determinando áreas onde os jogadores gastam o seu tempo de publicidade.Windows Azure permite que você use uma abordagem de MapReduce, chamada HDInsight, como um serviço, que permite a instalação de clusters Hadoop simples, direta.Usando a colméia, ou mesmo familiares ferramentas como Microsoft Office, você pode criar gráficos e relatórios ricos.Obter mais informações sobre este componente podem ser encontradas em nossa coluna de setembro de 2013, "Hadoop e HDInsight: Grande volume de dados no Windows Azure"(msdn.microsoft.com/magazine/dn385705).

Conclusão

Nós apenas arranhamos a superfície sobre a forma de criar soluções escaláveis e ricas para a indústria de jogos móvel combinando vários componentes da plataforma Windows Azure, para atender as demandas e exigências criadas por redes sociais e o enorme número de jogadores que são atraídos para essas aplicações.A nuvem pública oferece um modelo "pré-pago" flexível, que permite que empresas de todos os tamanhos competir neste espaço.

Bruno Terkaly is a developer evangelist for Microsoft. Seu profundo conhecimento é fruto de anos de experiência no campo, escrevendo código com uma grande quantidade de plataformas, linguagens, estruturas, SDKs, bibliotecas e APIs. Ele passa seu tempo escrevendo código, escrevendo blogs e fazendo apresentações ao vivo sobre como criar aplicativos baseados na nuvem, especificamente usando a plataforma Windows Azure. Você pode ler seu blog em blogs.msdn.com/b/brunoterkaly.

Ricardo Villalobos é arquiteto de software experiente com mais de 15 anos de experiência projetando e criando aplicativos para empresas em várias indústrias. Segurando diferentes certificações técnicas, bem como um mestrado em Administração pela Universidade de Dallas, ele trabalha como arquiteto de nuvem na equipe DPE globalmente engajados parceiros para Microsoft, ajudando as empresas em todo o mundo a implementar soluções no Windows Azure. Você pode ler seu blog em blog.ricardovillalobos.com.

Terkaly e Villalobos conjuntamente apresentar conferências da indústria em geral.Eles encorajam os leitores do Windows Azure Insider contatá-los para disponibilidade.Terkaly pode ser contatado em bterkaly@microsoft.com e Villalobos pode ser contatado em Ricardo.Villalobos@microsoft.com.

Agradecemos ao seguinte especialista técnico pela revisão deste artigo: Kevin Ashley (Microsoft)
Kevin Ashley trabalha na Microsoft como arquiteto e evangelista técnico.Ele é autor de Professional Windows 8 programação: Desenvolvimento de aplicativos com XAML e c# livro e top apps para Windows e Windows Phone.Kevin trabalha com startups e parceiros, aconselhando-os sobre a estratégia de design, de negócios e de tecnologia de software.Antes da Microsoft, ele foi dos fundadores de uma nuvem de estágio inicial e inicialização de software de inteligência de negócios.Em seu papel como um desenvolvedor de software sênior e arquiteto, Kevin desenvolveu grade, armazenamento de dados e soluções de negociação em tempo real para empresas da Fortune 500 e fundos de hedge no mundo: EUA, Reino Unido, Europa e Ásia.Kevin tem graus em matemática, ciência da computação e MBA em finanças.Blog do Kevin: http://kevinashley.com e Twitter: @kashleytwit