AppFabric 1.1. К скольким конечным точкам DataCacheServerEndpoint должен подключаться клиент?

В документации клиента AppFabric 1.1 обсуждается назначение списка конечных точек DataCachServer для DataCacheFactoryConfiguration. В большинстве примеров показан список, состоящий из одного или, возможно, двух разных кэш-серверов. Если кластер состоит из n серверов, должен ли клиент регистрировать каждый из серверов? Имеет ли значение, в каком порядке зарегистрированы серверы? Например, если у меня есть 50 серверов на моем веб-уровне и 5 серверов на моем уровне кэширования, регистрирует ли каждый из 50 веб-серверов все 5 серверов кэширования? Вот пример кода:

// Declare array for cache host(s).
DataCacheServerEndpoint[] servers = new DataCacheServerEndpoint[5];
servers[0] = new DataCacheServerEndpoint("Cache01", 22233);
servers[1] = new DataCacheServerEndpoint("Cache02", 22233);
servers[2] = new DataCacheServerEndpoint("Cache03", 22233);
servers[3] = new DataCacheServerEndpoint("Cache04", 22233);
servers[4] = new DataCacheServerEndpoint("Cache05", 22233);

// Setup the DataCacheFactory configuration.
DataCacheFactoryConfiguration factoryConfig = new DataCacheFactoryConfiguration();
factoryConfig.Servers = servers;

// Create a configured DataCacheFactory object.
DataCacheFactory mycacheFactory = new DataCacheFactory(factoryConfig);

// Get a cache client for the cache named "default".
DataCache myDefaultCache = mycacheFactory.GetCache("default");

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

Что касается балансировки нагрузки, Джейсон Рот написал следующее [есть ли другая доступная документация]?

Клиент App Fabric — это интеллектуальный клиент, который может напрямую связываться с сервером, на котором когда-либо хранились ваши данные. Приложению не нужно беспокоиться о балансировке нагрузки. Это делается с помощью клиента маршрутизации.


person Geoffrey McGrath    schedule 09.04.2013    source источник


Ответы (1)


Основываясь на некоторых тестах и ​​учитывая комментарий Джейсона Рота, я думаю, что DataCacheServerEndPoint используется «умным клиентом» для извлечения списка членов кластера кэша, когда метод GetCache вызывается в DataCacheFactory. Объект DataCache — это интеллектуальная вещь, и она интеллектуальна в том смысле, что если сервер, используемый в экземпляре DataCacheServerEndpoint, отключается или иным образом становится недоступным, интеллектуальный клиент по-прежнему имеет доступ к другим членам кластера. Поэтому целью списка из нескольких DataCacheServerEndpoint является обеспечение избыточности при вызове метода GetCache.

Совет заключается в том, что объект DataCache должен следовать одноэлементному шаблону, а не создаваться при каждом запросе данных из кэша. Именно поэтому нет необходимости балансировать нагрузку или предоставлять виртуальный IP-адрес для отдельных конечных точек DataCacheServerEndpoint.

Создайте столько экземпляров DataCacheServerEndPoints, сколько необходимо, чтобы хотя бы одна из них всегда работала — нет необходимости добавлять каждого члена кластера кэша, если только это не единственный способ убедиться, что хотя бы одна работает.

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

person Geoffrey McGrath    schedule 10.04.2013