Je cherche la façon la plus performante d'organiser l'utilisation du datacache et de la fabrique de datacache pour les appels de cache d'AppFabric, pour un nombre de caches compris entre 400 et 700 par chargement de page (et à peine quelques puts). Il semble que l'utilisation d'un seul DataCacheFactory statique (ou éventuellement deux dans une configuration round-robin) soit la solution.
Dois-je appeler GetCache("cacheName") pour chaque demande d'objet DataCache, ou dois-je en créer un statique au moment de l'initialisation de la fabrique de DataCache et l'utiliser pour tous les appels ?
Dois-je gérer des exceptions, vérifier les codes d'échec et tenter de nouvelles tentatives ?
Dois-je prendre en compte la contention lorsque plusieurs threads essaient d'utiliser le magasin de cache et veulent le même élément (par clé) ?
Existe-t-il une documentation qui explique en détail la conception et l'utilisation de ce système ?
Quelques informations que j'ai recueillies jusqu'à présent sur le forum :
http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/98d4f00d-3a1b-4d7c-88ba-384d3d5da915
"La création de la fabrique implique une connexion au cluster et peut prendre un certain temps. Mais une fois que vous avez l'objet factory et le cache avec lequel vous voulez travailler, vous pouvez simplement réutiliser ces objets pour faire des puts et des gets dans le cache, et vous devriez voir des performances beaucoup plus rapides."
http://social.msdn.microsoft.com/Forums/en-US/velocity/thread/0c1d7ce2-4c1b-4c63-b525-5d8f98bb8a49
"La création d'un seul DataCacheFactory (singleton) est plus performante que la création de plusieurs DataCacheFactory. Vous ne devez pas créer de DataCacheFactory pour chaque appel, car les performances s'en ressentiront."
"Veuillez essayer d'encapsuler l'algorithme round-robin (ayant 3/4/5 instances d'usine) dans votre singleton et comparez les résultats du test de charge."
http://blogs.msdn.com/b/velocity/archive/2009/04/15/pushing-client-performance.aspx
"Vous pouvez augmenter le nombre de clients pour augmenter le débit du cache. Mais parfois, si vous voulez avoir un plus petit nombre de clients et augmenter le débit, une astuce consiste à utiliser plusieurs instances de DataCacheFactory. L'instance de DataCacheFactory crée une connexion aux serveurs (par exemple, s'il y a 3 serveurs, elle créera 3 connexions) et multiplexe toutes les demandes provenant des caches de données sur ces connexions. Par conséquent, si le volume d'entrées/sorties est très élevé, ces connexions TCP risquent d'être engorgées. Une solution consiste donc à créer plusieurs instances de DataCacheFactory, puis à utiliser les opérations sur ces instances."
Voici ce qui est utilisé jusqu'à présent... la propriété est appelée et si la valeur de retour n'est pas nulle, une opération est effectuée.
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;
}
}
Voir cette question sur le forum Microsoft AppFabric : http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/e0a0c6fb-df4e-499f-a023-ba16afb6614f