Almacenamiento en caché de AppFabric: uso adecuado de DataCacheFactory y DataCache
Estoy buscando la forma más eficaz de organizar el uso de la fábrica de caché de datos y de caché de datos para las llamadas de almacenamiento en caché de AppFabric, para obtener entre 400 y 700 caché por carga de página (y casi ninguna colocación). Parece que usar un único DataCacheFactory estático (o posiblemente un par en una configuración round-robin) es el camino a seguir.
¿Llamo a GetCache ("cacheName") para cada solicitud de objeto DataCache, o hago una estática en el momento en que se inicializa la fábrica de DataCache y la uso para todas las llamadas?
¿Tengo que manejar excepciones, verificar códigos de falla e intentar reintentos?
¿Tengo que considerar la contención cuando más de un hilo intenta usar el almacén de caché y quiere el mismo elemento (por clave)?
¿Existe algún tipo de documentación que explore adecuadamente el diseño y el uso de esto?
Alguna información que he reunido hasta ahora del foro:
http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/98d4f00d-3a1b-4d7c-88ba-384d3d5da915
"La creación de la fábrica implica conectarse al clúster y puede llevar algo de tiempo. Pero una vez que tenga el objeto de fábrica y la caché con la que desea trabajar, simplemente puede reutilizar esos objetos para colocar y entrar en la caché, y debe ver un rendimiento mucho más rápido ".
http://social.msdn.microsoft.com/Forums/en-US/velocity/thread/0c1d7ce2-4c1b-4c63-b525-5d8f98bb8a49
"Crear un DataCacheFactory (singleton) es más eficaz que crear múltiples DataCacheFactory. No debe crear DataCacheFactory para cada llamada, tendrá un impacto en el rendimiento".
"Intente encapsular el algoritmo round-robin (que tenga 3/4/5 instancias de fábrica) en su singleton y compare los resultados de la prueba de carga".
http://blogs.msdn.com/b/velocity/archive/2009/04/15/pushing-client-performance.aspx
"Puede aumentar el número de clientes para aumentar el rendimiento de la memoria caché. Pero a veces, si desea tener un conjunto más pequeño de clientes y aumentar el rendimiento, un truco es utilizar varias instancias de DataCacheFactory. La instancia de DataCacheFactory crea una conexión con los servidores (e. .g si hay 3 servidores, creará 3 conexiones) y multiplexará todas las solicitudes de las cachés de datos a estas conexiones. Por lo tanto, si el volumen de poner / obtener es muy alto, estas conexiones TCP podrían tener un cuello de botella. Entonces, una forma es crear varias instancias de DataCacheFactory y luego usar las operaciones en ellas ".
Aquí lo que está en uso hasta ahora ... se llama a la propiedad y si el valor de retorno no es nulo, se realiza una operación.
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;
}
}
Vea esta pregunta en el foro de Microsoft AppFabric:http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/e0a0c6fb-df4e-499f-a023-ba16afb6614f