A terminologia MMO para "permanecer dentro de um único mundo de jogo" é um fragmento único . O EVE online é o único MMO importante a tentar agrupar todos os jogadores em um único fragmento.
Para sua sorte, eles publicaram um artigo muito informativo sobre como fazê-lo.
(fonte: gamasutra.com )
As más notícias. Você não pode aplicar as técnicas do EVE online em geral. Suas soluções são absolutamente adaptadas ao seu gênero e implementação.
NOTA : Para toda a rede de shard único super sofisticada do EVE online, eles usam um banco de dados. Eles não conseguiram projetar uma solução escalável, consistente e moderadamente em tempo real para bancos de dados distribuídos.
De qualquer maneira, a leitura de como eles fizeram isso deve ajudá-lo a projetar sua própria solução. Cuidado, porém, você está tentando resolver um problema muito difícil.
Em vez de distribuir o seu servidor de jogos, sugiro explorar suas outras avenidas primeiro.
- Faça o perfil do servidor do jogo.
- Otimize o código do servidor para reduzir a carga da CPU, se houver algum problema.
- Otimize o protocolo de comunicação entre os clientes e o servidor para reduzir as conversas na rede.
- Otimize o servidor do jogador para as comunicações do banco de dados.
- execute um otimizador de consulta e faça as alterações necessárias.
- reduza a interação do banco de dados a um mínimo
- Mova o banco de dados para uma máquina separada.
Isso geralmente ajuda uma tonelada. Mantenha o banco de dados na mesma rede local, se possível, mas isso deve ajudar seu servidor de jogos a ficar muito mais animado quando é a única coisa em execução no hardware do servidor.
Seu primeiro passo deve ser dissociar o acesso direto ao banco de dados do servidor do jogo e usar um middleware específico de uso para preparar dados para o servidor (ou seja, XML, JSON). Eles seriam capazes de lidar com qualquer número de bancos de dados e, mais importante, fornecer opções de cache específicas do aplicativo. Armazene em cache o que puder e nag o banco de dados somente quando necessário. Faça buscas grandes e raramente em vez de muitas consultas pequenas para obter o melhor desempenho possível em seu cenário.
O banco de dados de sua escolha também pode permitir a operação de clusters que facilitam a expansão dos recursos disponíveis e fornecem resultados mais rapidamente, mas esse é um assunto que requer muita experiência e um administrador de banco de dados dedicado para configurar e manter - e não é bem para o orçamento independente também.
fonte
Em relação ao servidor do jogo: Uma estratégia comum é usar vários servidores nos quais cada servidor gerencia uma parte do mundo do jogo. Cada usuário geralmente só precisa saber sobre o que está acontecendo ao seu redor, por isso faz sentido dividir o mundo por localidade. Infelizmente, isso fica muito mais complicado quando você tem um mundo aberto sem fronteiras, em vez de um mundo que consiste em zonas fechadas e os jogadores se teletransportam entre eles. Quando você tem um mundo aberto, precisa de uma maneira de transferir jogadores entre zonas de maneira uniforme e de sincronizar as áreas próximas às fronteiras entre os servidores. Esse é um problema complicado.
Em relação ao banco de dados: os bancos de dados SQL geralmente escalam mal. Eles não foram projetados para serem distribuídos. Atualmente, porém, existe uma tendência bastante nova de bancos de dados NoSQL como MongoDB ou Cassandra, que foram projetados para serem distribuídos por vários servidores. Eles tornam muito mais fácil adicionar capacidade apenas adicionando mais servidores. Então, por que todos os jogos grandes não mudam para eles? Porque:
Portanto, quando seu projeto já está muito avançado, a mudança para outra solução de banco de dados pode ser um grande risco e um investimento muito grande de tempo e energia.
fonte
Não. Esta é uma área incrivelmente difícil que ainda não foi resolvida.
fonte
Eu sei que isso é velho, mas ....
Na verdade, existem duas áreas para focar nisso.
Você precisa distribuir seu aplicativo entre vários servidores. Você precisa distribuir seu banco de dados entre vários servidores.
E você precisa ter redundância para ambos.
Existem algumas soluções de código aberto para isso. Farmville é um bom exemplo usando o MemSQL / Couchbase.
fonte