Plataforma Wargaming: Distribuição

Olá!



Cerca de dois anos atrás, meu colega Maxim (max_posedon) publicou um artigo Wargaming Platform: Hello World , no qual ele "tentou" (como ele próprio designou) explicar o que é a Wargaming Platform. Meus colegas e eu queremos continuar compartilhando informações e, desta vez, vamos nos aprofundar um pouco mais - como o título do artigo sugere, na distribuição.



Todo mundo conhece a distribuição digital, usamos regularmente, já vimos de tudo ao longo dos 20 anos de sua existência, então vou contornar a teoria e os exemplos do mercado, e vou falar mais sobre a implementação e experiência específica.



Esquema de distribuição generalizada para Wargaming



Vamos começar imediatamente com a imagem: você pode ver os componentes principais do Wargaming Distribution System (WDS) e o fluxo de dados do conteúdo.





Figura 1



O processo pode ser descrito resumidamente da seguinte forma: o estúdio de jogos (Game Studio) carrega a próxima compilação do jogo para o servidor WDS, que após o processamento necessário (mais sobre isso na seção "Sob o capô") através dos canais de distribuição (componentes marcados em azul) os distribui para o cliente Aplicativos WGC.



WGC (Wargaming Game Center) é um aplicativo cliente desktop, um meio de interação do usuário com a Plataforma Wargaming, em particular com o sistema de distribuição. O WGC baixa atualizações para a máquina do usuário a partir de fontes atualmente disponíveis.



O WDS tem três canais de distribuição principais :





Sim, a tecnologia BitTorrent está no centro da entrega de atualizações. Devo dizer desde já que a troca de dados p2p entre clientes é, em termos absolutos, o canal mínimo em termos de volume de tráfego. Sua principal função é acelerar o carregamento em redes locais com um grande número de clientes WGC (por exemplo, cibercafés) e reduzir a carga na interface de rede externa. Além disso, o uso do BitTorrent facilita a organização de um ponto de presença em qualquer lugar desejado.



O canal de distribuição Static Seeds é interessante do ponto de vista histórico. Dê uma olhada no gráfico de barras abaixo: ele mostra a dinâmica do custo mínimo de tráfego de CDN para os maiores consumidores (ou seja, o preço mais baixo no atacado).





Figura 2



Em 2010, no alvorecer do World of Tanks, um gigabyte de tráfego custava cerca de US $ 0,2 para pedidos de 10 PB ou mais. Com atualizações regulares de jogos AAA com milhões de audiências, o custo do tráfego é bastante impressionante. A capacidade de adicionar facilmente seu nó a qualquer ponto (do ponto de vista geográfico / de provedores) permite que você extraia volumes tangíveis de tráfego para ele. Dependendo da presença de um CDN em um ponto ou outro, da carga no sistema durante os lançamentos, do volume de lançamentos de um determinado jogo, tal ferramenta tem um bom efeito econômico até hoje.



Para deixar o esquema básico de distribuição completamente claro, vale a pena dizer algumas palavras sobre o componente, que na Figura 1 é designado como backend do Wargaming Distribution System. As principais tarefas do componente:



  • preparar atualizações, garantindo a quantidade mínima de conteúdo baixado e instalado pelo cliente;
  • distribuir atualizações por meio de canais de distribuição;
  • fornecer ao cliente informações para atualizações.


Agora, vamos dar uma olhada rápida nas opções de distribuição.



Funcionalidade



A tecnologia BitTorrent, e em particular a implementação de libtorrent (graças a Arvid Norberg), "pronto para uso" permite que você implemente com custos mínimos:



  • retracker local e sementes - relevantes para grupos de usuários e estúdios de jogos;
  • conectar vários CDNs - escalabilidade horizontal;
  • fatores de ponderação para diferentes CDNs - balanceamento, CDNs "sobressalentes";
  • verificação de integridade e restauração - os arquivos do jogo podem ser danificados por negligência, limpeza de aplicativos, antivírus, problemas com drivers ou mídia física.


Independentemente da libtorrent, mas também sobre downloads:



  • Pré-carregando atualizações. O estúdio de jogos pode publicar atualizações apenas para download (sem instalação): no momento do lançamento da nova versão, elas serão aplicadas, os usuários começarão a jogar a nova versão mais cedo.
  • Balanceamento de pré-carga. Com grandes volumes de atualizações, você pode "manchar" uniformemente o recebimento preliminar de atualizações para reduzir a carga nos nós de distribuição e suavizar o pico.


Instalando / atualizando jogos:



  • Patches. O usuário baixa apenas as partes que faltam do jogo, bem compactadas.
  • DLC. Parte do conteúdo pode ser carregada opcionalmente à escolha do usuário ou dependendo da lógica do jogo.
  • Tipos de clientes. O jogo pode dar ao usuário a escolha de qual "tipo de cliente" baixar (por exemplo, World of Tanks: há uma escolha entre texturas padrão (SD) e texturas de alta definição (HD), o que permite que usuários que não têm o sistema não suportem configurações máximas de gráficos. )
  • Mini cliente. A capacidade de jogar até a instalação completa, o estúdio de jogo tem a capacidade de determinar o conjunto mínimo de arquivos necessários para iniciar o jogo.


De outros:



  • Instalando redistribuíveis.
  • Executar instaladores arbitrários durante os processos de instalação / desinstalação.




Sob o capô



Peças e Patches



O jogo pode ser dividido em partes (partes), que especificam uma certa sequência de instalação. Isso permite que o estúdio de jogo:



  • entregar conteúdo ao usuário apenas para o idioma do jogo selecionado;
  • implementar a parte mínima necessária do jogo para iniciar o jogo e entregá-lo primeiro;
  • designar algumas partes como DLC e permitir que o jogo / usuário as solicite separadamente.


Para instalar uma peça, um ou mais patches devem ser entregues e aplicados. Em seu núcleo, o patch é um arquivo 7z com o codec LZMA2. O nível de compressão pode ser alterado dependendo do tipo de conteúdo do jogo. Para instalar um jogo do zero, um patch deve conter todo o conteúdo de uma parte específica do jogo. Se esta for uma atualização, o patch conterá apenas a diferença necessária. Essa diferença é calculada arquivo por arquivo usando os seguintes algoritmos:





O primeiro dos algoritmos é baseado em blocos e o segundo fornece a capacidade de copiar partes de comprimento arbitrário e repetir. Dependendo da natureza das alterações (inserção, exclusão, substituição), o local no arquivo onde foram feitas (início, fim, meio), seu tamanho, redundância de arquivo, um dos algoritmos pode superar muito o outro, ou em termos do tamanho do arquivo diff resultante, ou pela velocidade de sua aplicação na máquina do usuário. O WDS escolhe o algoritmo de diferença binária ideal para um caso particular.



Torrente



Para baixar os patches, os arquivos torrent são preparados por versão, o cliente WGC recebe as informações necessárias do backend do WDS e inicia uma sessão de torrent com os torrents necessários.



Seeds são, como já mencionado indiretamente, CDNs (webseeds), Static Seeds (máquinas especialmente preparadas com clientes baseados em libtorrent), os próprios clientes WGC e quaisquer clientes de torrent com os torrents necessários. Recebe essas sementes em uma sessão de torrent das seguintes fontes:



  • Back-end WDS;
  • torrent tracker;
  • DHT ;
  • LPD ;
  • PEX .


Alguns provedores bloqueiam o próprio protocolo BitTorrent ou o download de um arquivo * .torrent. Como o download do webseeds ocorre via HTTP e o arquivo * .torrent em si é baixado via HTTPS, esses bloqueios não são críticos para nós, o jogo ainda será entregue. No pior caso, o tráfego de Static Seeds e p2p será perdido. Já houve casos nos Estados Unidos em que um provedor exigiu a instalação de seus certificados e filtrou, inclusive o tráfego HTTPS (não muito bom), encontrou um arquivo torrent lá e o bloqueou. Mas, de repente, alterar a extensão do arquivo torrent permitiu que ele fosse baixado, ou seja, os filtros estavam apenas no nível do nome do conteúdo.



O WGC está estabelecendo atualmente até 50 conexões de canais de distribuição. Várias conexões podem ser estabelecidas no mesmo CDN, o que permite uma utilização mais eficiente do canal entre seu nó e o cliente. Além disso, o CDN principal usa o algoritmo de controle de congestionamento BBR , que é considerado ganancioso e utiliza o canal muito bem. Essa configuração fornece a maior utilização de largura de banda para entrega rápida de jogos, mas é claro que o conforto de usar a conexão com a Internet para outros aplicativos pode ser prejudicado durante as atualizações. Uma série de testes de configurações alternativas estão em andamento e, em um futuro próximo, podemos esperar uma diminuição no número de conexões de forma contínua com um aumento no conforto, mas sem um impacto tangível na velocidade de entrega.



Por via das dúvidas, aqui gostaria de enfatizar mais uma vez que qualquer atividade de rede pode afetar a qualidade do tráfego para o cliente do jogo, para o qual é crítica. É por isso que, enquanto o jogo está em execução, o WGC não executa nenhuma operação de rede sem uma necessidade explícita do cliente do jogo (por exemplo, uma operação de autorização).



Instalando atualizações



Os processos de download e descompactação de patches são organizados em paralelo e têm a seguinte aparência:



  • Comece a baixar o patch, alterando a prioridade de download para a parte com o cabeçalho do arquivo.
  • Após receber o cabeçalho completo do arquivo, o processo de descompactação é iniciado e os dados recebidos da rede são imediatamente descompactados.
  • Os dados descompactados são salvos no disco.
  • O patch baixado também é salvo no disco, uma vez que nem todos os fragmentos são necessários para descompactar no momento do recebimento e mais para distribuição a terceiros.
  • Após o processamento, o arquivo de patch pode ser deixado no disco ou excluído imediatamente, dependendo da configuração fornecida pelo estúdio de jogo.


Os processos de descompactação e aplicação de diferenças binárias ocorrem em um processo separado, que permite controlar o sistema e a prioridade de I / O por meio do SO. Além dessa funcionalidade, há uma configuração "turbo" personalizada que irá acelerar o processo de instalação, mas também competirá fortemente com outros aplicativos por recursos. Por padrão, o WGC opera em modo de poucos recursos, contando com o conforto, mas na primeira instalação, o WGC explica ao usuário que ele tem uma escolha.



atuação



Volume de atualizações



Minimizar a quantidade de dados baixados é uma das principais tarefas do nosso sistema. Ao contrário da abordagem do Steam, em que a discrição dos dados processados ​​do cliente do jogo é de 1 MB, frequentemente operamos com bytes ao construir diferenças binárias. Além disso, blocos desses bytes podem ser adicionados a qualquer parte do arquivo ou removidos dele. Como resultado, as atualizações de versão programadas de World of Tanks e World of Warships geralmente têm um volume de 1–2 GB, enquanto as mesmas versões dos jogos baixados no Steam requerem cerca de 5 GB para serem baixados. World of Warships é distribuído via Steam, então esses dados são obtidos regularmente, e para World of Tanks os dados são obtidos de downloads de testes especiais.



Espaço necessário em disco para o usuário



Para a quantidade mínima de dados baixados e p2p você tem que pagar com o espaço em disco necessário para as operações de instalação e atualização do cliente. No momento, o usuário precisa de mais espaço do que o cliente do jogo ocupa: esse buffer pode ter até metade do tamanho do cliente. Estamos trabalhando para reduzir esse valor, e é possível em um futuro próximo consertá-lo e não ultrapassar 2 GB, o que está se tornando bastante aceitável devido ao tamanho dos jogos modernos. Mas há outro recurso importante: para atualizar o jogo (que no mundo moderno é uma atividade regular), um buffer relativamente pequeno também é suficiente, que já é cerca de 4 GB para a maioria dos patches do jogo. Ao mesmo tempo, algumas dessas soluções requerem o dobro de espaço em disco que o cliente do jogo ocupa.





Realizamos uma série de medições para comparar a velocidade de instalação do cliente World of Warships no WGC e Steam em velocidades de canal de rede iguais. Ao usar o modo de instalação WGC padrão, ambos os sistemas mostram resultados quase idênticos (na medida do possível para registrar em tais experimentos, mesmo levando em consideração os sistemas mais limpos, reinicializações regulares, etc.). Ao usar "turbo", o ganho médio de WGC para a câmara está na faixa de 5 a 7 por cento do tempo de instalação completa. Devemos também levar em consideração o fato de que a largura de banda da interface de rede teve que ser subestimada para ambos os sistemas a fim de obter as mesmas condições e largura de banda mais ou menos estável. Levando em consideração o fato de que o WGC utiliza mais fortemente o canal da rede (veja a seção Torrent),sem restrições adicionais na máquina personalizada, a velocidade da instalação inicial do jogo torna-se visivelmente maior.



Palavra final, ou o que não estava aqui



A plataforma Wargaming, e em particular o sistema de distribuição Wargaming, são grandes sistemas de software com uma história de dez anos e dezenas de diferentes tecnologias e linguagens de programação. No artigo, conhecemos apenas o esquema de distribuição de alto nível e suas principais características. A arquitetura do sistema, a maioria das tecnologias, processos de desenvolvimento, lançamentos, operações, nuances geográficas de distribuição, o próprio aplicativo WGC com todas as suas funcionalidades de não distribuição e muito mais permaneceram fora dos colchetes devido ao conteúdo não borracha do artigo. Isso significa apenas que estou aguardando perguntas sobre o artigo e principalmente sobre o que não foi incluído nele, nos comentários. Bom código, boa sorte a todos!



All Articles