Eu suspeito que eles estejam implantando a versão mais recente de seu código, o que requer que eles reiniciem o aplicativo (e esperamos que executem alguns testes antes de reativar o acesso). Desse ponto de vista, é mais um problema do StackOverflow e menos do que um do ServerFault.
Eu acho que é possível criar um sistema de hot-patching, mas seria necessariamente incrivelmente complicado. Pelo que entendi, um "aplicativo" do servidor MMO consiste em vários componentes diferentes -
-
Servidor de login - Lida com a autenticação e atua como um "hub" entre os servidores de jogo. Quando um cliente está no jogo, ele não interage mais com o servidor de login. Nesse sistema, você pode aplicar patches e reiniciar o servidor de login sem interferir na jogabilidade (embora você tenha um período de tempo em que as pessoas não conseguirão efetuar login).
-
Servidores de jogo - Clusters de máquinas agrupadas em unidades independentes lógicas ("mundos", etc). Assume-se que cada cluster de jogo usa algum tipo de protocolo de comunicação interna para corresponder um ao outro; você provavelmente terá que corrigir cada cluster de uma só vez. Uma maneira possível de fazer isso é corrigir um failover quente. Você precisaria ser capaz de tanto
- Sinalize o cliente para se conectar ao failover a quente e desconectar do cluster antigo.
- Mantenha o estado sincronizado entre o failover e o servidor de aplicativos desatualizado enquanto todos os clientes transferem.
-
Servidores de banco de dados - Algum tipo de armazenamento de dados persistente, como um RDBMS. Espero que você não esteja fazendo alterações no armazenamento de dados com frequência. Presumivelmente, cada servidor / cluster de jogo tem um armazenamento de dados independente. Você pode usar o mesmo truque com um failover quente (e dizer aos servidores de jogo para desconectar, esperar que os bancos de dados antigos e de failover sejam sincronizados e reconectar ao failover), mas isso parece muito arriscado para mim.
Todos os casos acima adicionam uma complexidade incrível a um sistema já complexo e introduzem vários locais em que uma falha de código pode causar perda ou corrupção de dados.
Outra solução é usar um idioma projetado para 100% de tempo de atividade e recursos internos para executar o código de execução de hotpatch. Erlang é uma boa escolha ( exemplo de hotpatching ), e Java tem funcionalidade semelhante .