Devo manter o servidor de login separado do servidor de jogos?

15

Estou pensando em criar um servidor MMO e tenho observado como outros jogos estruturam sua rede. Uma das coisas que notei é que sempre há um servidor de login e, em seguida, o (s) servidor (es) de jogo.

Ainda estou decidindo se devo fazer isso, mas gostaria de ouvir algumas opiniões primeiro. Quais são as vantagens disso e como o servidor de login se comunica com o servidor do jogo para manipular logins?

JPiolho
fonte
11
A pergunta "Como o balanceamento de carga é alcançado nos MMOs?" pode ser interessante: gamedev.stackexchange.com/q/5956/450
Hendrik Brummermann

Respostas:

15

Acredito que isso seja causado principalmente pelo fato de o logon e a manipulação de jogos serem logicamente mais ou menos independentes, portanto, eles geralmente são mantidos separados para melhor dissociação, manutenção e escalabilidade mais fáceis. Eles não precisam necessariamente residir em servidores físicos diferentes, eles podem executar serviços tão bem quanto independentes na mesma máquina. Se o tráfego aumentar muito, o servidor de login poderá ser facilmente movido para outra máquina.

Além disso, os servidores de login são um vetor provável de ataque, portanto é bom separá-los do ponto de vista da segurança.

Internamente, diferentes serviços do lado do servidor podem usar soquetes regulares para se comunicar, seja na mesma máquina ou em outra máquina no cluster. Como alternativa, um servidor de banco de dados pode ser usado para manter um sinalizador 'está logado' para cada usuário.

Alexander Gessler
fonte
Na maioria das vezes, vejo esse sinalizador no db do servidor de jogos e dentro do db do servidor de logins, para que o servidor de logon possa verificar um contra o outro e se logindb! = Gamerserverdb, o usuário será desconectado.
daemonfire300
10

Um aspecto muito importante no desenvolvimento de MMOs é alcançar a escalabilidade e permitir o balanceamento de carga.

Usuários de autenticação verificando credenciais, status de banimento, contando logins com falha recentes, etc. é uma tarefa que pode ser realizada sem conhecer nada da lógica ou dos dados do jogo. Portanto, é muito fácil mover isso para seu próprio cluster de servidores.

Além disso, os servidores de login são uma "entrada" bem conhecida para o cliente entrar em contato. Após a autenticação bem-sucedida, eles podem despachar o cliente para o servidor apropriado no cluster de servidores de jogos. Esse despacho pode ser feito encaminhando a conexão de rede ao servidor de jogo certo ou dizendo ao cliente para abrir uma nova conexão ao servidor de jogos certo.

Você deve pensar nos cortes do seu sistema para distribuição desde o início. É muito fácil executar várias peças em um servidor. Mas é bastante difícil dividir as coisas que foram desenvolvidas como uma unidade.

Hendrik Brummermann
fonte
2

Como ex-jogador de WoW, minha experiência foi que o servidor de login sempre foi o elo mais fraco da cadeia.

Os servidores mundiais eram geralmente impressionantemente estáveis, mesmo lidando com uma carga excepcional (por exemplo, novas versões do pacote de expansão) muito bem.

Mas o (s) servidor (es) de login nunca pareceu lidar tão bem e frequentemente ficava inativo enquanto os servidores mundiais estavam bem. (o que significa que se você perder a conexão em um ataque / masmorra, não poderá voltar, mas os outros jogadores estarão esperando por você!)

E agora que o sistema de login do WoW foi mesclado ao Battle.Net, o Starcraft 2 pode ficar indisponível quando o WoW está sob carga pesada (como aconteceu por algumas horas quando o Cataclysm foi lançado)

Portanto, se você estiver criando um jogo que terá um número muito grande de usuários, a escalabilidade e o desempenho do sistema de login também são muito importantes.

bluescrn
fonte
11
Eu acho que os servidores de login são o principal alvo de ataques de força bruta em senhas, então eles precisam ser capazes de lidar com um pouco de carga. Especialmente se o jogo for tão popular que os atacantes começarem a usar botnets (para impedir a limitação da taxa por endereço IP), além da adivinhação aleatória normal dos nomes de usuário.
Hendrik Brummermann
Não logar e colocar um jogador no mundo pode ter vários motivos. Pode ser o servidor de logon / banco de dados da conta. Mas pode ser causado por uma falha ao carregar as informações do jogador do banco de dados. Ou por uma falha do sistema que envia os jogadores para servidores mundiais, servidores de bate-papo ... Um firewall interno ainda pode ser capaz de lidar com conexões conhecidas, mas pode não ser capaz de aplicar o conjunto de regras para decidir sobre novas conexões. Jogar um jogador no mundo é muito mais complexo do que interagir quando você está lá dentro.
Hendrik Brummermann