Cache de AppFabric - Uso adequado de DataCacheFactory e DataCache
Estou procurando a maneira mais eficiente de organizar o uso do datacache e do datacache factory para chamadas de armazenamento em cache do AppFabric, pois entre 400 e 700 cache são obtidos por carregamento de página (e quase nenhuma colocação). Parece que usar um único DataCacheFactory estático (ou possivelmente um par em uma instalação round-robin) é o caminho a percorrer.
Chamo GetCache ("cacheName") para cada solicitação de objeto do DataCache ou faço uma estática no momento em que o DataCache Factory é inicializado e o uso para todas as chamadas?
Preciso lidar com exceções, verificar códigos de falha e tentar novas tentativas?
Preciso considerar a disputa quando mais de um encadeamento tenta usar o armazenamento em cache e deseja o mesmo item (por chave)?
Existe algum tipo de documentação que explora adequadamente o design e o uso disso?
Algumas informações que reuni até agora no fórum:
http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/98d4f00d-3a1b-4d7c-88ba-384d3d5da915
"Criar a fábrica envolve a conexão com o cluster e pode levar algum tempo. Mas, uma vez que você tenha o objeto de fábrica e o cache com o qual deseja trabalhar, poderá simplesmente reutilizar esses objetos para fazer put e entrar no cache, e você deve veja desempenho muito mais rápido ".
http://social.msdn.microsoft.com/Forums/en-US/velocity/thread/0c1d7ce2-4c1b-4c63-b525-5d8f98bb8a49
"A criação de um único DataCacheFactory (singleton) tem mais desempenho do que a criação de vários DataCacheFactory. Você não deve criar o DataCacheFactory para cada chamada, pois ela terá desempenho atingido."
"Por favor, tente encapsular o algoritmo round-robin (com instâncias de fábrica 3/4/5) no seu singleton e compare os resultados do teste de carga."
http://blogs.msdn.com/b/velocity/archive/2009/04/15/pushing-client-performance.aspx
"Você pode aumentar o número de clientes para aumentar a taxa de transferência do cache. Mas, às vezes, se você deseja ter um conjunto menor de clientes e aumentar a taxa de transferência, um truque é usar várias instâncias do DataCacheFactory. A instância do DataCacheFactory cria uma conexão com os servidores (e. .g se houver 3 servidores, ele criará 3 conexões) e multiplexará todas as solicitações dos datacaches para essas conexões.Portanto, se o volume put / get for muito alto, essas conexões TCP poderão ter gargalos. várias instâncias do DataCacheFactory e use as operações nelas. "
Aqui o que está em uso até agora ... a propriedade é chamada e, se o valor de retorno não for nulo, uma operação será executada.
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;
}
}
Veja esta pergunta no fórum Microsoft AppFabric:http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/e0a0c6fb-df4e-499f-a023-ba16afb6614f