Pergunta

Digamos que eu tenha um aplicativo garantido para sobrecarregar um servidor, mesmo após otimizações. Existe uma tecnologia que permite que um aplicativo da Web seja dividido em vários servidores, mantendo seu estado?

Tomemos, por exemplo, um jogo online de vários jogadores. Geralmente, no World of War Craft, existem vários servidores com cada um com seu próprio estado de jogo. O que estou procurando é algo que permitiria que esse estado de jogo fosse compartilhado entre vários servidores.

Editar: a plataforma realmente não importa, pois isso é para um aplicativo da web, portanto, o back -end não importa muito. No entanto, trilhos e java são possibilidades.

Além disso, Wow foi apenas um exemplo, estou apenas interessado em tal tecnologia; Um grande jogo seria um bom aplicativo para isso.

Foi útil?

Solução

Não há realmente nada para aplicações na memória de baixa latência, como jogos online em tempo real, pelo menos não como um middleware arbitrário.

Projeto Darkstar fez uma tentativa admirável nisso no lado de usabilidade e complexidade, mas descobriu (sem surpresa) que não estava escalando.

Por fim, é um problema difícil (embora não intratável), onde não há solução que esteja perto de ser universalmente aplicável. Em particular, é provável que você tenha uma troca, entre a necessidade de agir com dados obsoletos, por um lado, contra a necessidade de trocar constantemente dados compartilhados, por outro. Falta de correção versus crescimento exponencial na complexidade ... escolha seu veneno.

Vale a pena notar - especialmente se o domínio do seu aplicativo não for jogos em tempo real - que você geralmente não se importa se estiver trabalhando com dados obsoletos, desde que fiquem corretos em breve. Nesses casos, sistemas simples de cache como o memcache são ótimos. Da mesma forma, se você precisar de mais correção, mas não precisa se preocupar tanto com a taxa de transferência, algo como Hazelcast (mencionado em outra resposta) pode ser ótimo, mas para a maioria dos jogos online que são grandes o suficiente para exigir o balanceamento de carga "milhares de operações/ Sec "simplesmente não é bom o suficiente.

Alguma tecnologia MMO faz algumas tentativas de distribuir o aplicativo, particionando geograficamente, o que significa que não há muito estado compartilhado, e exige que esse esquema faça sentido no mundo e na ficção do jogo.

Outra abordagem é particioná-lo por serviço e implementar a maioria dos serviços com sua abordagem RPC pronta para uso. Isso permite que você escala com bastante facilidade se seus serviços forem independentes, mas qualquer dependência entre os serviços o coloca de volta na estaca zero.

Outras dicas

Dê uma olhada em Hazelcast. É uma plataforma de distribuição de dados altamente escalável de código aberto para Java. O Hazelcast oferece mapa distribuído, que será compartilhado entre os membros do cluster. Você pode armazenar facilmente seus dados nele. É super super fácil de usar. Basta adicionar o hazelcast.jar ao seu caminho de classe. Não há necessidade de instalar nenhum servidor.

eu uso Microsoft HPC, não para jogos. Muito fácil de configurar e usar.

Você não menciona sua plataforma. Para Java, há Terracota

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top