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

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

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

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

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

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

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


person Kevin Buchan    schedule 10.06.2010    source источник


Ответы (1)


Итак, если я вас правильно понял, у вас есть:

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

AppFabric потенциально предлагает два способа решения этого сценария.

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

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

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

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

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

person PhilPursglove    schedule 11.06.2010
comment
Фил, большое спасибо за ваш (очень подробный) ответ. Это очень помогает укрепиться. - person Kevin Buchan; 11.06.2010
comment
Корпорация Майкрософт не рекомендует использовать невыделенные хосты для узлов AppFabric Cache, особенно хосты IIS, из-за проблем с конфликтами под нагрузкой. - person andrewbadera; 27.04.2011
comment
Объекты удаляются из локального кеша либо из-за тайм-аута, либо из-за того, что основной кеш уведомляет локальный кеш о том, что объект устарел. - Однако локальные кэши связываются с основными кэшами на основе интервала опроса (по умолчанию 300 секунд). Любые изменения объекта в основном кэше между опросами не будут обнаружены локальными кэшами, поэтому они будут выдавать копии в течение короткого времени после обновления основного кэша. - person redcalx; 11.12.2012