Как удалить кэш по ключу в приложении с балансировкой нагрузки? - PullRequest
2 голосов
/ 05 января 2012

У меня есть приложение с балансировкой нагрузки из 3 веб-серверов. У меня есть требование, когда по нажатию кнопки мне нужно удалить кэш по ключу одновременно на всех трех веб-серверах. Например, есть кэш с именем currentTempera. Поэтому, когда я нажимаю кнопку, я хочу просто удалить кэш ["currentTempera"] на всех трех веб-серверах. Я не хочу, чтобы другие элементы кэша удалялись в процессе.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 05 января 2012

Когда вы запускаете веб-ферму с балансировкой нагрузки, каждый из серверов имеет свой собственный кэш. Одной из возможностей может быть реализация механизма, который заставляет веб-сервер, который ответил на исходный запрос «удалить кеш», сделать такой же запрос другим серверам. Это может быть довольно сложным и трудным для управления, хотя. Каждый сервер должен был бы «знать» о других серверах в ферме, чтобы знать, с какими другими серверами связаться.

Если вы поместите что-то в файл конфигурации (или базу данных) для хранения полного списка серверов (возможно, по прямому внутреннему IP-адресу) и напишите свой код очистки кэша, чтобы автоматически обнаружить текущий сервер, тогда тот же код может быть развернут на всех серверах.

В качестве альтернативы, вы можете просто использовать метод грубой силы. Храните список внутренних IP-адресов, и когда веб-сервер обрабатывает определенный запрос, отправьте этот же запрос всем внутренним IP-адресам. Код, который обрабатывает запрос, должен знать, является ли он внутренним или внешним запросом, чтобы избежать бесконечного цикла запросов от каждого сервера. Это можно сделать с помощью пары имя / значение в строке запроса, которая будет указывать, что это внутренний запрос - что-то, что не будет включено в запрос браузера.

Это довольно теоретическая дискуссия, но звучит ли это как то, что может сработать для вас?

ПРИМЕЧАНИЕ. Предполагается, что кэширование выполняется в приложении IIS на каждом веб-сервере, а не на отдельном уровне пользовательских служб.

0 голосов
/ 05 января 2012

Каким бы ни был механизм, необходимо будет знать обо всех серверах, для которых необходимо очистить свои кэши.

Вместо того, чтобы каждый сервер знал обо всех других серверах, имейте централизованный процесс (сервис / приложение / что-нибудь), которыйставит в очередь запросы на очистку кеша, а затем отправляет их на каждый сервер в ферме.

Таким образом, вы располагаете логикой в ​​одном месте, избегая, возможно, бесконечного цикла (каждый сервер обновляет другие серверы, которые обновляют исходный и т. д..) и может масштабироваться с минимальными изменениями.

Веб-серверы не отвечают за управление очередью - просто передают события очистки кэша в некоторый централизованный процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...