manutenção do servidor MMORPG

13

Parece que a maioria dos jogos MMORPG tem alguma manutenção regular do servidor, alguns todos os dias, alguns uma vez por semana. O que é que eles realmente têm que fazer e por que é necessário?

Se você começar com esse projeto, o que você pode fazer para evitar isso?

    
por Zitrax 09.06.2009 / 12:24

9 respostas

17

Eu suspeito que eles estejam implantando a versão mais recente de seu código, o que requer que eles reiniciem o aplicativo (e esperamos que executem alguns testes antes de reativar o acesso). Desse ponto de vista, é mais um problema do StackOverflow e menos do que um do ServerFault.

Eu acho que é possível criar um sistema de hot-patching, mas seria necessariamente incrivelmente complicado. Pelo que entendi, um "aplicativo" do servidor MMO consiste em vários componentes diferentes -

  • Servidor de login - Lida com a autenticação e atua como um "hub" entre os servidores de jogo. Quando um cliente está no jogo, ele não interage mais com o servidor de login. Nesse sistema, você pode aplicar patches e reiniciar o servidor de login sem interferir na jogabilidade (embora você tenha um período de tempo em que as pessoas não conseguirão efetuar login).

  • Servidores de jogo - Clusters de máquinas agrupadas em unidades independentes lógicas ("mundos", etc). Assume-se que cada cluster de jogo usa algum tipo de protocolo de comunicação interna para corresponder um ao outro; você provavelmente terá que corrigir cada cluster de uma só vez. Uma maneira possível de fazer isso é corrigir um failover quente. Você precisaria ser capaz de tanto

    1. Sinalize o cliente para se conectar ao failover a quente e desconectar do cluster antigo.
    2. Mantenha o estado sincronizado entre o failover e o servidor de aplicativos desatualizado enquanto todos os clientes transferem.
  • Servidores de banco de dados - Algum tipo de armazenamento de dados persistente, como um RDBMS. Espero que você não esteja fazendo alterações no armazenamento de dados com frequência. Presumivelmente, cada servidor / cluster de jogo tem um armazenamento de dados independente. Você pode usar o mesmo truque com um failover quente (e dizer aos servidores de jogo para desconectar, esperar que os bancos de dados antigos e de failover sejam sincronizados e reconectar ao failover), mas isso parece muito arriscado para mim.

Todos os casos acima adicionam uma complexidade incrível a um sistema já complexo e introduzem vários locais em que uma falha de código pode causar perda ou corrupção de dados.

Outra solução é usar um idioma projetado para 100% de tempo de atividade e recursos internos para executar o código de execução de hotpatch. Erlang é uma boa escolha ( exemplo de hotpatching ), e Java tem funcionalidade semelhante .

    
por 09.06.2009 / 14:10
12

Ninguém mais tem experiência com algo assim? Hã.

Existem vários motivos que unem o código e os sistemas. Primeiro, lembre-se de que a maioria dos atuais 'grandes' mecanismos MMO foram programados há vários anos e, apesar dos gráficos e atualizações tecnológicas desde então, ainda dependem da maneira como muitos desses sistemas foram escritos em 2000, aproximadamente. O Eve-Online, por exemplo, ainda roda em uma grande instância do Microsoft SQL Server, e é por isso que eles estão sempre tentando tirar mais proveito dele atualizando o hardware.

Um exemplo de melhoria desde o início de WoW e EVE é o trabalho feito em bancos de dados distribuídos de chave / valor, como o MapReduce do Google (e sua implementação de código aberto, Hadoop), serviços de fila de processamento de resposta afirmativa extremamente rápidos (Amazon SQS) e outras tecnologias orientadas para "nuvem".

Eu tenho mais experiência com o EVE (sou mais um cara de laser do que um cara de machado de batalha), então alguns desses exemplos são mais orientados para o EVE.

Em termos de razões de sistemas:

  • Os nós físicos falham em uma base consistente. Quando um nó falha, normalmente sua atividade é migrada para outro lugar usando vários meios. No entanto, o nó precisa ser colocado novamente em serviço o mais rápido possível. No caso do EVE, eles usam uma linguagem de processamento sem empilhamento e servidores virtuais; Eu não tenho certeza do que é a arquitetura da Blizzard.
  • A consistência do banco de dados precisa ser verificada, os logs precisam ser liberados e os índices e os caches de dados precisam ser reconstruídos. Isso é especialmente importante em um sistema como o EVE com apenas uma instância de banco de dados "ativa".
  • Os patches do sistema operacional precisam ser aplicados no momento em que eles podem reinicializar os nós sem precisar migrar demais para outras atividades. A migração consome muitos recursos de rede que poderiam ser dedicados ao processamento online.
  • MMOs baseados em RDBMS têm problemas enormes com bloqueio de dados e integridade referencial. O tempo de inatividade é usado para limpar bloqueios antigos e quebras de integridade dos registros de atividades.
  • A maioria dos jogos implementa caches de dados geograficamente localizados para informações estáticas ou semi-estáticas (veja dados de resumo de cache abaixo) em áreas de uso pesado, ou seja, costa leste versus costa oeste dos EUA. Esses caches são atualizados manualmente durante o tempo de inatividade.

Em termos de razões de software:

  • Os jogos, quando operam, usam muito OLTP - que é o On Line Transaction Processing - tipo de leituras / gravações em bancos de dados. No entanto, às vezes você quer um relatório de resumo ... como quantos de um animal em particular você matou nos últimos 3 anos de moagem. Isso é melhor administrado por um relatório OLAP - que é On Line Analytical Processing - que contém informações resumidas baseadas em várias linhas em um conjunto de dados gigante. Na realidade, os jogos implementam sistemas que usam o OLAP para construir um cache para limitar o número de consultas que precisam ser lidas - ou seja, elas constroem um total a partir de uma determinada data e, em seguida, quando você faz a pergunta, elas apenas leem as linhas da loja OLTP que resumem o período desde a data certa. Mesclar os dois, e você pode realmente quantificar quão inútil sua vida se tornou.
  • O hot-patch mencionado acima, que eu vejo como um problema de software, mas os desenvolvedores de software vêem como um problema de sistema. ;)
  • Reabastecendo lojas de itens - em Eve, os cinturões de asteróides são atualizados a cada noite e certos complexos também são reciclados. Isso pode ser feito até certo ponto enquanto on-line, mas alguns dos algoritmos são muito complexos e precisam ser feitos em um modo off-line porque eles trazem brevemente o banco de dados enquanto resumem a atividade econômica do dia anterior.

Executar uma economia com loops fechados e abertos é um problema para os operadores MMO - se você não acredita em mim, leia alguns dos artigos acadêmicos que foram escritos sobre economias de jogos e alguns dos estudos de jogos antigos como Ultima Online que teve economias relativamente primitivas. A análise que precisa acontecer para reabastecer os loops abertos e identificar fraudes e outras atividades econômicas negativas precisa acontecer off-line com um instantâneo dos dados, que às vezes só pode ser feito enquanto o banco de dados está totalmente bloqueado.

Se você notar, a manutenção de Eve acontece quando é meio-dia na Inglaterra, onde fica o principal datacenter.

    
por 30.07.2009 / 03:17
3

Eu suspeito que o tempo total que a Blizzard (eu estou inferindo que, dado que é uma manhã de terça-feira que você está postando sua pergunta) citações para manutenção é para o cluster inteiro; nem todo servidor leva tanto tempo para realizar o trabalho.

Embora seja possível trazer os servidores individuais de volta mais rapidamente, isso ilícita gritos de favoritismo para os jogadores cujos reinos aconteceram mais cedo no cronograma. Como tal, eles mantêm tudo para baixo até que todo o trabalho seja feito; com centenas de reinos para trabalhar, eles provavelmente fazem muito do trabalho em paralelo, mas ainda serializam uma verificação final antes de colocar as coisas de volta online. Se você está fazendo uma atualização de hardware, isso provavelmente é serializado em todos os data centers que eles têm.

Por que eles realizam a manutenção, alguns podem ser apenas uma reinicialização de desempenho. Embora fosse ótimo se tais reinicializações não fossem necessárias, o custo de fazê-lo versus o impacto de não fazê-lo pode estar direcionando sua escolha aqui.

Quando você observa por que eles não podem agrupar os processos e executar a manutenção, o que as pessoas pouco sabem da infraestrutura do WoW sugere que várias máquinas fornecem serviços para cada região (ou seja, uma para o mundo, uma para instâncias e invasões). um para campos de batalha, etc.) eles não usam uma configuração de processo ativo-ativo compartilhado pelo estado. Não há compartilhamento de estado ao vivo, apenas de dados persistentes por meio de um banco de dados.

No final, a mecânica de fornecer um serviço on-line com informações de estado para uma grande base de assinantes desafia algumas das melhores práticas que podemos adotar quando falamos de um site ou de outro serviço tradicional baseado na Internet.

    
por 09.06.2009 / 14:14
1

Algumas das mais recentes paralisações no EvE Online foram sobre a instalação de novo hardware como uma SAN mais rápida. Embora seja tecnicamente possível mover a maior parte dos dados criando um novo grupo de arquivos na nova unidade e, em seguida, esvaziando a principal, isso resultaria em um período estendido de desempenho reduzido devido à E / S constante. Então eles optaram para destacar o banco de dados de 1,1 TB e movê-lo de uma só vez.

A resposta a esta questão também depende da aplicação específica. Por exemplo, um servidor que manipule um sistema em estrela específico não pode ser ativado sem interromper a execução do jogo, portanto, o tempo de inatividade é usado para reatribuir servidores mais poderosos a possíveis pontos de acesso. Além disso, os cálculos de propriedade (soberania) dos sistemas estelares são calculados. Isso depende das dezenas de variáveis diferentes, as quais podem mudar dependendo das ações do jogador. Escusado será dizer que fazer isso ao vivo pode causar bloqueio excessivo e / ou outros problemas de concorrência. Mas é melhor deixar isso para stackoverflow .

    
por 09.06.2009 / 14:12
0

presumivelmente algo com o qual você não poderia lidar via clustering / balanceamento de carga, como alterações importantes no esquema do banco de dados.

    
por 09.06.2009 / 12:53
0

Em um tópico recente Quantas vezes devo reiniciar servidores Linux outro bom ponto foi mencionado, verificando se tudo é iniciado corretamente em uma reinicialização ou após qualquer alteração na configuração principal.

    
por 09.06.2009 / 13:10
0

Uma simples atualização de hardware (ou substituição de hardware) também é apresentada como "manutenção de servidor" pelos jogos MMORPG. Tão trivial que muitas vezes esquecemos disso.

    
por 09.06.2009 / 14:07
0

Implementei uma arquitetura MMO em Erlang que suporta atualizações e distribuição de código. Por exemplo, um "GamePlay Server" pode ser executado em um número arbitrário de máquinas, se alguém precisar de uma atualização de hardware, seus objetos podem ser transferidos (em tempo real) para as outras máquinas. Isso permite atualizações no hardware de software sem qualquer tempo de inatividade.

Você pode conferir meu site no link .

    
por 29.07.2009 / 22:39
0

Sou levado a acreditar que a janela de manutenção também permite a substituição rotineira de hardware para garantir que os componentes não falhem.

    
por 29.07.2009 / 23:00