Каков наилучший способ удаленного сброса кэша сервера в веб-ферме?
-
09-06-2019 - |
Вопрос
Каждый из наших производственных веб-серверов поддерживает свой собственный кэш для отдельных веб-сайтов (ASP.NET Веб-приложений).В настоящее время, чтобы очистить кэш, мы заходим на сервер и "касаемся" файла web.config.
У кого-нибудь есть пример безопасного способа удаленно сбросить кэш для определенного веб-приложения?В идеале мы могли бы сказать "очистить кэш для приложения X, работающего на всех серверах", но также "очистить кэш для приложения X, работающего на сервере Y".
Изменения / Уточнения:
Вероятно, мне следует уточнить, что выполнение этого через само приложение на самом деле не является вариантом (т. Е.какой-то вход в приложение, переход на определенную страницу или обработчик, который очистил бы кэш).Чтобы сделать что-то подобное, нам нужно было бы отключить / обойти код ведения журнала и отслеживания статистики или испортить нашу статистику.
Да, срок действия кэша истекает регулярно.Однако я хотел бы настроить что-нибудь, чтобы я мог истекать срок действия определенного кэша по требованию, обычно после того, как мы что-то изменим в базе данных (мы используем SQL 2000).Мы можем сделать это сейчас, но только войдя в систему на самих серверах.
Решение 2
Нашел DevX статья о сенсорной утилите, которая выглядит полезной.
Я собираюсь попробовать объединить это либо с таблицей в базе данных (добавьте запись, и утилита touch найдет ее и обновит соответствующий файл web.config), либо с веб-службой (сделайте вызов, и утилита touch будет вызвана для обновления соответствующего файла web.config)
Другие советы
Для каждого приложения вы могли бы написать небольшой скрипт cache-dump.aspx, чтобы уничтожить данные кэша / приложения.Скопируйте его во все ваши приложения и напишите скрипт-концентратор для управления вызовами.
Для обеспечения безопасности вы могли бы добавить всевозможные проверки подлинности или IP-адреса.
Вот как я делаю фактический сброс приложения:
Context.Application.Lock()
Context.Session.Abandon()
Context.Application.RemoveAll()
Context.Application.UnLock()
Возможно, это не "элегантно", но вы могли бы настроить запланированную задачу, которая выполняет пакетный скрипт.Скрипт, по сути, "коснется" web.config (или какого-либо другого файла, который вызывает повторную компиляцию) для вас.
В противном случае срок действия кэша вашего приложения не истечет через N минут?