Я ищу наиболее эффективный способ организации использования фабрики datacache и datacache для вызовов кэширования AppFabric, так как от 400 до 700 кешей получает на загрузку страницы (и почти ни одного пута). Кажется, что использование единственного статического DataCacheFactory (или, возможно, пары в циклической установке) - это путь.
Я вызываю GetCache ("cacheName") для каждого запроса объекта DataCache или я делаю один статический в момент инициализации фабрики DataCache и использую его для всех вызовов?
Нужно ли обрабатывать исключения, проверять коды ошибок и повторять попытки?
Нужно ли учитывать конкуренцию, когда более одного потока пытается использовать хранилище кэша и хочет один и тот же элемент (по ключу)?
Есть ли какая-то документация, которая должным образом исследует дизайн и использование этого?
Некоторая информация, которую я собрал далеко от форума:
http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/98d4f00d-3a1b-4d7c-88ba-384d3d5da915
«Создание фабрики включает в себя подключение к кластеру и может занять некоторое время. Но как только у вас есть фабричный объект и кеш, с которым вы хотите работать, вы можете просто повторно использовать эти объекты для размещения и попадания в кеш, и вы должны увидеть гораздо более высокую производительность. "
http://social.msdn.microsoft.com/Forums/en-US/velocity/thread/0c1d7ce2-4c1b-4c63-b525-5d8f98bb8a49
«Создание одного DataCacheFactory (singleton) более эффективно, чем создание нескольких DataCacheFactory. Не следует создавать DataCacheFactory для каждого вызова, это приведет к снижению производительности.»
"Пожалуйста, попробуйте инкапсулировать алгоритм циклического перебора (имеющий 3/4/5 заводских экземпляров) в вашем синглтоне и сравните результаты нагрузочного теста."
http://blogs.msdn.com/b/velocity/archive/2009/04/15/pushing-client-performance.aspx
"Вы можете увеличить количество клиентов, чтобы увеличить пропускную способность кэша. Но иногда, если вы хотите иметь меньший набор клиентов и увеличить пропускную способность, хитрость заключается в использовании нескольких экземпляров DataCacheFactory. Экземпляр DataCacheFactory создает соединение с серверами. (например, если есть 3 сервера, он создаст 3 соединения) и мультиплексирует все запросы от кэшей данных к этим соединениям. Поэтому, если объем ввода / вывода очень высок, эти соединения TCP могут быть узкими. Так что один из способов создать несколько экземпляров DataCacheFactory, а затем использовать операции над ними. "
Вот что используется до сих пор ... свойство вызывается, и если возвращаемое значение не равно null, выполняется операция.
private static DataCache Cache
{
get
{
if (_cacheFactory == null)
{
lock (Sync)
{
if (_cacheFactory == null)
{
try
{
_cacheFactory = new DataCacheFactory();
}
catch (DataCacheException ex)
{
if (_logger != null)
{
_logger.LogError(ex.Message, ex);
}
}
}
}
}
DataCache cache = null;
if (_cacheFactory != null)
{
cache = _cacheFactory.GetCache(_cacheName);
}
return cache;
}
}
См. Этот вопрос на форуме Microsoft AppFabric: http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/e0a0c6fb-df4e-499f-a023-ba16afb6614f