Я ищу наиболее эффективный способ организовать использование datacache и datacache factory для вызовов кэширования AppFabric, так как от 400 до 700 кэшей загружается на каждую страницу (и практически без каких-либо пометок). Похоже, что использование одного статического DataCacheFactory (или, возможно, пара в круговой настройке) - это путь.
Я вызываю GetCache ( "cacheName" ) для каждого запроса объекта DataCache или могу сделать один статический файл в момент инициализации DataCache factory и использовать его для всех вызовов?
Нужно ли обрабатывать исключения, проверять коды сбоев и повторять попытки?
Должен ли я рассматривать конкуренцию, когда более одного потока пытается использовать хранилище кеша и хочет тот же элемент (по ключу)?
Есть ли какая-то документация, которая должным образом исследует дизайн и использование этого?
Некоторая информация, которую я собрал до сих пор от форума:
http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/98d4f00d-3a1b-4d7c-88ba-384d3d5da915
"Создание factory предполагает подключение к кластеру и может занять некоторое время. Но как только у вас есть объект factory и кеш, с которым вы хотите работать, вы можете просто повторно использовать эти объекты для создания и получения в кеш, и вы должны увидеть гораздо более высокую производительность".
http://social.msdn.microsoft.com/Forums/en-US/velocity/thread/0c1d7ce2-4c1b-4c63-b525-5d8f98bb8a49
"Создание единого DataCacheFactory (singleton) более эффективно, чем создание нескольких DataCacheFactory. Вы не должны создавать DataCacheFactory для каждого вызова, у него будет удар производительности".
"Пожалуйста, попробуйте инкапсулировать алгоритм round-robin (с 3/4/5 factory экземплярами) в вашем singleton и сравнить результаты теста нагрузки".
http://blogs.msdn.com/b/velocity/archive/2009/04/15/pushing-client-performance.aspx
"Вы можете увеличить количество клиентов, чтобы увеличить пропускную способность кеша. Но иногда, если вы хотите иметь меньший набор клиентов и увеличить пропускную способность, трюк заключается в использовании нескольких экземпляров DataCacheFactory. Экземпляр DataCacheFactory создает соединение с серверами (e..g, если есть 3 сервера, он будет создавать 3 соединения) и мультиплексирует все запросы из datacaches на эти соединения. Поэтому, если уровень put/get очень высок, эти TCP-соединения могут быть узкими. является создание нескольких экземпляров DataCacheFactory, а затем использование операций над ними."
Здесь то, что используется до сих пор... вызывается свойство и если возвращаемое значение не равно нулю, выполняется операция.
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