Qual é a melhor maneira de redefinir remotamente o cache do servidor em um web farm?

StackOverflow https://stackoverflow.com/questions/76855

  •  09-06-2019
  •  | 
  •  

Pergunta

Cada um de nossos servidores Web de produção mantém seu próprio cache para sites separados (Aplicativos Web ASP.NET).Atualmente, para limpar o cache, fazemos login no servidor e "tocamos" no arquivo web.config.

Alguém tem um exemplo de uma maneira segura de remotamente redefinir o cache de um aplicativo da web específico?Idealmente, poderíamos dizer "limpar o cache do aplicativo X em execução em todos os servidores", mas também "limpar o cache do aplicativo X em execução no servidor Y".

Edições/Esclarecimentos:

  • Eu provavelmente deveria esclarecer que fazer isso através do próprio aplicativo não é realmente uma opção (ou seja,algum tipo de login no aplicativo, navegue até uma página ou manipulador específico que limparia o cache).Para fazer algo assim, precisaríamos desabilitar/ignorar o registro e o código de rastreamento de estatísticas ou bagunçar nossas estatísticas.

  • Sim, o cache expira regularmente.O que eu gostaria de fazer é configurar algo para que eu possa expirar um cache específico sob demanda, geralmente depois de alterarmos algo no banco de dados (estamos usando o SQL 2000).Podemos fazer isso agora, mas apenas fazendo login nos próprios servidores.

Foi útil?

Solução 2

Encontrei um DevX artigo sobre um utilitário de toque que parece útil.

Vou tentar combinar isso com uma tabela no banco de dados (adicione um registro e o utilitário touch o encontrará e atualizará o arquivo web.config apropriado) ou um serviço web (faça uma chamada e o utilitário touch será chamado para atualizar o arquivo web.config apropriado)

Outras dicas

Para cada aplicativo, você pode escrever um pequeno script cache-dump.aspx para eliminar os dados do cache/aplicativo.Copie-o para todos os seus aplicativos e escreva um script de hub para gerenciar a chamada.

Por segurança, você pode adicionar todos os tipos de pesquisas de autenticação ou verificação de IP.

Aqui está a maneira como faço o despejo real do aplicativo:

Context.Application.Lock()
Context.Session.Abandon()
Context.Application.RemoveAll()
Context.Application.UnLock()

Isso pode não ser "elegante", mas você pode configurar uma tarefa agendada que execute um script em lote.O script basicamente "tocaria" no web.config (ou algum outro arquivo que causa uma recompilação) para você.

Caso contrário, o cache do seu aplicativo não está configurado para expirar após N minutos?

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