AppFabric Синхронизация локальных кэшей

У нас есть очень простая настройка AppFabric, где есть два клиента - давайте назовем их Сервер A и Сервер B. Сервер A также является ведущим узлом кэша, и на обоих серверах A и B включен локальный кэш. Мы хотели бы иметь возможность обновить элемент с сервера B и сделать так, чтобы это изменение распространялось на локальный кэш сервера A в течение 30 секунд (например).

Насколько я понимаю, существует два разных способа распространения изменений на клиенте:

  1. Установите тайм-аут в кэше клиента, чтобы исключать элементы каждые X секунд. При следующем запросе элемента он получит элемент из кэша хоста, поскольку в локальном кэше нет элемента.
  2. Включить уведомления и эффективно подписаться на получение обновлений с хоста кеша

Если мое требование состоит в том, чтобы получать обновления для всех клиентов в течение 30 секунд, то установка времени ожидания в локальном кэше менее 30 секунд, по-видимому, является единственным выбором, если использовать параметр № 1 выше. Из-за размера кеша было бы неэффективно удалять весь кеш (99,99% которого, вероятно, не изменился за последние 30 секунд).

Я думаю, что нам нужно реализовать вариант 2 выше, но я не уверен, что понимаю, как это работает. Я прочитал всю документацию MSDN ( http://msdn.microsoft.com/en-us/library/ee808091.aspx) и посмотрел на некоторые примеры, но мне все еще неясно, действительно ли необходимо писать пользовательский код или, если это только если вы хотите сделать дополнительную обработку.

Итак, мой вопрос: необходимо ли добавлять код в существующее приложение, если вы хотите, чтобы обновления распространялись на все локальные кэши с помощью уведомлений, или же функция обратного вызова является просто дополнительным способом добавления дополнительной обработки или кода, если уведомление отправлено вниз? Могу ли я просто включить уведомления и установить соответствующий интервал опроса на клиенте, и все будет работать?

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

1 ответ

Решение

Я провел несколько тестов и рад сообщить, что вам НЕ нужно писать какой-либо код, чтобы обеспечить синхронизацию всех клиентов. Если вы установите следующее как дочерний элемент конфигурации кластера:

В конфигурации клиента вам нужно установить sync="NotificationBased" для элемента.

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

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

Другие вопросы по тегам