Вопрос о том, как можно использовать функцию кэша AppFabric - PullRequest
9 голосов
/ 11 июня 2010

Вопрос о том, как можно использовать функцию кэширования AppFabric.

Я прошу прощения за вопрос, на который я могу ответить из документации, но я прочитал, прочитал и искал, и не могу ответить на этот вопрос,Это заставляет меня поверить, что у меня есть принципиально ошибочное понимание того, для чего предназначены возможности кэширования AppFabric.

Я работаю в географически разрозненной компании.У нас есть конкретное приложение, которое изначально было написано как приложение клиент / сервер.Это настолько масштабно и критично для бизнеса, что мы хотим с детства превратить его в лучшее архитектурное решение.

Одна из наших идей заключалась в том, чтобы преобразовать приложение для чтения его данных с помощью вызовов WCF в совмещенную сеть.сервер, который будет кешировать связь с базой данных в Соединенных Штатах.Характер приложения таков, что каждый будет иметь тенденцию просматривать одни и те же записи 2000 года или около того только с редкими обновлениями, и эти обновления будут выполняться ограниченным кругом пользователей.

Я надеялся, что механизм кеширования AppFabric позволит мне настроить один глобальный кеш, и когда, например, пользователь в Азии запрашивает данные, которых нет в кеше или которые устарели, с которых веб-сервер будет читатьбазы данных в США, предоставьте данные пользователю, а затем обновите кеш, который будет распространять эти данные на другие веб-серверы, чтобы они сами не знали, возвращаться к базе данных.

Может ли AppFabric работатьтаким образом, или мне просто нужно, чтобы серверы извлекали свои собственные данные из базы данных?

1 Ответ

11 голосов
/ 11 июня 2010

Так что, если я вас правильно понимаю, у вас есть:

  • сервер баз данных в США
  • веб-серверов по всему миру?
  • (потенциально)Кэш AppFabric в США.

. В AppFabric возможно два варианта решения этого сценария.

  1. Локальный кэш
    В настройках AppFabric клиенты имеютвозможность иметь локальный кеш объектов, при котором первый вызов кеша для объекта помещает объект в локальный кеш, а последующие запросы для этого объекта выполняются из локального кеша.Объекты удаляются из локального кэша либо по причине истечения времени ожидания, либо потому, что основной кэш уведомляет локальный кеш о том, что объект устарел.Вы настраиваете это в своем файле web.config:

    <dataCacheClient>
        <localCache isEnabled="true" sync="NotificationBased" ttlValue="300" />
    </dataCacheClient>
    

    В таком случае ваши веб-серверы являются клиентами;когда один из ваших азиатских пользователей запрашивает объект, локальный кеш для веб-сервера Asia будет содержать копию этого объекта.Обновления этого объекта будут распространяться в основной кэш, и при настройке на основе уведомлений копии этого объекта в локальных кешах на других веб-серверах будут считаться недействительными, так что следующий запрос будет выполняться из основного кеша, а затемлокальный кэш будет обновляться обновленным объектом.

  2. Размещать кэш AppFabric на веб-серверах
    Ничто не мешает вашим веб-серверам быть серверами кэш-памяти AppFabric!В этой настройке вы не будете использовать локальный кеш, потому что это не имеет смысла, когда основной кеш уже локальный для вашего клиента.Однако это гарантирует, что ваш клиент всегда извлекает из кэша самую последнюю версию кэшированного объекта.
    Однако вам следует быть осторожным с нагрузками на сеть, поскольку эта настройка может означать, что ваш веб-сервер в США всегда читаеткэшированные объекты, скажем, с вашего европейского веб-сервера, которые могут замедлять работу обоих серверов, поскольку они пытаются обслуживать запросы кеша, а также веб-трафик.

В обоих случаях помните, что пока вашклиенты получат последнюю версию кэшированного объекта, в AppFabric нет постоянства, и вам нужно будет записывать свои изменения в базу данных одновременно с обновлением кэшированного объекта, в противном случае вы рискуете прочесть внедата данных в кеш.

...