Os servidores de trabalho agendados são a escolha certa para um motor de jogo sensível ao tempo?

5

Atualmente, estou arquitetando e criando um novo aplicativo da web interessante que entrará em algumas áreas nas quais tenho pouca experiência em desenvolvimento de jogos.

O aplicativo não é necessariamente um jogo, mas há tarefas muito sensíveis ao tempo e tarefas agendadas que um servidor precisará executar para executar atividades relacionadas ao jogo (por exemplo, novas partidas começam ao meio-dia todos os dias para um torneio de 12 dias , atualizando placares às 17h todos os dias, etc ...)

No passado, eu normalmente utilizava tarefas do cron com o Quartz Scheduler em execução em um servidor de aplicativos da web, mas sei que isso provavelmente não é uma solução escalonável para a base de usuários verdadeiramente massiva que o gerenciamento está me dizendo para esperar. são gerenciais e, provavelmente, altamente otimistas quanto a isso) e também pela importância do papel dessas tarefas neste aplicativo da Web.

A outra coisa importante que eu quero considerar é que eu quero evitar o SPOF (Single Point Of Failure). Se o servidor de trabalho principal ficar inoperante, outro servidor de trabalho deverá conseguir executar o trabalho com êxito em seu lugar. Eu suponho que isso pode ser feito adequadamente registro de bloqueio e transações de banco de dados.

Minha pergunta é se tarefas agendadas como CRON em execução em um servidor de aplicativos web são uma escolha de design inteligente, dadas as tarefas de jogo sensíveis ao tempo deste aplicativo, ou há algo mais apropriado para executar um mecanismo de jogo escalável paralelo aos servidores de aplicativos da web ?

    
por maple_shaft 09.07.2012 / 13:33
fonte

1 resposta

2

Eu não sei porque você está descartando Quartz como uma opção possível. O Quartz possui uma configuração de implantação em cluster que fornece um agendador redundante de cluster singleton (um nó do cluster executará o trabalho com determinadas garantias). Ele usa a técnica de bloqueio de db que você mencionou para obter um bloqueio em todo o cluster. Veja Configuração do cluster de quartzo .

O que não está claro em seus requisitos de "carga" é se um único nó no cluster deve ser responsável pela execução da tarefa agendada (cluster singleton) ou se cada nó no cluster deve executar a tarefa em um determinado momento. . O primeiro pode ser alcançado com as opções de clustering que mencionei. O último é possível usando instâncias de quartzo independentes em cada nó, executando a mesma configuração e NTP para garantir a sincronização de tempo entre os nós. (Existem outras opções, como enviar uma mensagem do acionador para o tópico em cluster).

O único ponto em que um Quartz agrupado com um repositório SQL não escala bem é quando você deseja agendar trabalhos sub-segundos sequencialmente, mas a partir de sua descrição, esse não é o caso.

    
por 09.07.2012 / 17:45
fonte