Maneira mais eficiente de configurar um servidor de jogo

1

Eu estou executando um jogo baseado em PHP que tem mais de 45 milhões de membros previstos para o final deste ano (2011) Atualmente estamos em 7,5 milhões, este jogo está sendo executado no facebook e estou desesperado para ajudar a obter este servidor de jogos tão eficiente e tão poderoso quanto possível.

é um servidor dedicado com

Processador Fabricante Intel Modelo i7 920 Freqüência 4x 2x 2,66 GHz NIC GigaEthernet RAM 12 GB Disco rígido 4 x 1 TB

especificações.

Ele tem o apache instalado, o cPanel, o phpMyAdmin, vários mods do apache e o MySQL.

O jogo também executa 47 chamadas mysql por segundo por usuário.

Existe alguma alternativa ao acima, que poderia ser mais rápida, mais eficiente, etc?

Eu não me importo de ter que recodificar o jogo para ajustá-lo, desde que ele maximize nosso limite superior de membros no jogo.

Obrigado

Além disso, existe uma maneira de dizer qual é o nosso limite máximo para jogadores, chamadas de banco de dados, etc.?

Obrigado mais uma vez, espero que vocês possam ajudar :)

    
por alex bowers 22.02.2011 / 22:14

2 respostas

7

A melhor maneira de carregar seu software e ambiente é colocá-lo, ou um sistema idêntico, sob carga artificial. Se o jogo puder ser roteirizado, faça-o e faça com que muitos jogadores com scripts entrem e joguem a partir de uma máquina vizinha, aumentando lentamente o número de jogadores artificiais até que os tempos de resposta voltem a níveis que não são aceitáveis. Isso fornecerá uma indicação do número máximo de usuários para os quais você pode fornecer um bom desempenho a qualquer momento.

Depois de ter o ambiente em um estado de carga alta, observe as métricas relevantes do sistema para ver onde está o afunilamento (geralmente um componente sofre antes do restante) - se houver uma maneira de otimizar isso, repita o teste. A primeira coisa a verificar é se o principal fator limitante é E / S de disco, RAM ou CPU e, em seguida, associar o que está acontecendo para ver se o culpado é algo que você pode otimizar com facilidade (talvez alguma parte de seu código seja ineficiente e mastigando muito tempo de CPU (em cujo caso a criação de perfil pode sugerir pontos apertados que podem ser otimizados), talvez você fique sem RAM e comece a trocar antes que I / O ou CPU se tornem um grande problema sozinhos RAM ou reduzir a quantidade necessária para cada processo pode ajudar), talvez a atividade do banco de dados esteja saturando a largura de banda de E / S e assim por diante.

Pode não haver maneira de otimizar o gargalo principal em uma única máquina que vale a pena - então você precisa começar a pensar em usar várias máquinas (você deve fazer planos para isso de qualquer maneira, caso sua popularidade cresça mais rápido que esperado ou para fins de failover (para manter seu aplicativo ativo se um servidor físico desenvolver uma falha grave).

Sem algumas análises, é difícil dar respostas mais específicas do que isso, já que as métricas de desempenho de um aplicativo podem diferir muito do seguinte.

    
por 22.02.2011 / 23:01
3

47 chamadas por usuário por segundo nesse hardware não funcionam. Ponto. É um número muito alto para começar. Parece codificação ineficiente / loops ineficientes / SQL muito granular. Eu entenderia isso em um grau limitado para um jogo em tempo real, mas não para um jogo de navegador. Eu sugiro que você identifique de onde vêm essas instruções SQL e encontre uma alternativa.

Em segundo lugar, se é isso, você tem os dois, ram e discos lentos patéticos, ambos serão fatores limitantes na escalabilidade.

    
por 24.02.2011 / 08:42