2013-04-11 4 views
1

Im aux prises avec un scénario en ce qui concerne l'accès à un cache sur plusieurs applications Web sur un seul serveur web (IIS 8/Windows Server 2012).correcte Architecture Cache pour plusieurs sites

Actuellement nous avons un serveur avec 16 Go de mémoire, qui fonctionne un seul site. Par souci d'arguments, disons que ce site consomme 10 Go de mémoire par lui-même (beaucoup je sais)

Il stocke tout en System.Web.HttpRuntime.Cache, où la récupération est super rapide. Un scénario typique serait de récupérer 10 000 objets de ce cache, ce qu'il peut faire en quelques millisecondes.

Il devient difficile quand je veux ajouter une autre application Web à ce serveur qui est identique à 99,9% à l'autre site en cours d'exécution sur le serveur, et souhaite idéalement accéder à tout ce site éclairant rapidement HttpRuntime.Cache.

Le problème pour voir im est que ce HttpRuntime.Cache ne peut être partagé entre les applications en ce qui im ​​au courant. J'ai essayé AppFabric, Redis et NCache, tous les agents de cache distribués, et le plus rapide, ils peuvent récupérer les mêmes 10 000 objets est d'environ 2 secondes, ce qui n'est pas bon pour un site Web à la demande. (En passant, je suis assez sûr que 1,999 de ces 2 secondes sont remplies de désérialisation qui est aussi très intensive)

Ai-je manqué quelque chose d'évident ... un moyen pour deux applications Web sur un serveur d'accéder à un cache qui ne nécessite pas une sérialisation/désérialisation coûteuse? Ou est-il temps de débourser pour un nouveau serveur web.

Répondre

0

Je ne peux pas être sûr à ce sujet donc je vais essayer de faire une proposition :)

Lorsque vous utilisez Redis pour obtenir plusieurs clés, assurez-vous que vous le faites dans une seule transaction (MULTI/EXEC) ou au moins vous ne faites pas 1 appel par clé car c'est très lent et inefficace (le serveur web passerait beaucoup de temps à faire des E/S pour redis).

0

Je comprends votre situation. En fait, beaucoup de gens font face à la même chose. Je vous encourage

utiliser la fonction de cache client de NCache qui vous permet de mettre en cache un sous-ensemble de l'ensemble

cache distribué dans la mémoire de processus de votre application .NET.

Avec cache client, vous pouvez atteindre vos objectifs de performance. Et, vous seriez toujours en mesure de construire un très grand cache en raison de la cache distribuée dans les coulisses. C'est quelque chose que vous ne pouvez pas faire avec un cache HTTP autonome.

Laissez-moi savoir si vous voulez parler à quelqu'un dans NCache équipe un-à-un à ce sujet.

Questions connexes