8

Mon installation précédente était un serveur Web unique et un serveur de base de données unique. J'utilisais la mise en cache de niveau 2 de nhibernate pour mettre en cache des choses afin d'éviter que beaucoup d'appels ne soient envoyés à la base de données. Cela a beaucoup travaillé comme j'utilisais ce cet ensembleNhibernate Problèmes/questions de mise en cache de second niveau lors du passage d'un serveur Web unique à un environnement à charge équilibrée de plusieurs serveurs Web

nhibernate.caches.syscache 

et a ajouté ce code pour activer la deuxième mise en cache de niveau (en utilisant le fournisseur de syscache régulière):

 return configuration 
      .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ApplicationMap>().Conventions.Add(typeof(Conventions))) 
      .ExposeConfiguration(
       c => { 
        c.SetProperty("proxyfactory.factory_class", proxyFactory); 
        c.SetProperty("cache.provider_class", "NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache"); 
        c.SetProperty("cache.use_second_level_cache", "true"); 
        c.SetProperty("cache.use_query_cache", "true"); 
        c.SetProperty("expiration", "86400"); 
       }) 
      .BuildSessionFactory(); 

J'ai maintenant migré vers un nouvel environnement qui a plusieurs serveurs Web et j'essaye de comprendre les implications de ceci (j'ai toujours un serveur de DB simple).

Depuis le cache est stocké sur le serveur Web avant, maintenant il semblerait que j'ai 2 caches parallèles sur chaque serveur Web qui eux-mêmes ne peuvent être synchronisés et peut entraîner de mises à jour de date, etc.

Qu'est-ce que est la meilleure solution pour obtenir les avantages de la mise en cache que j'avais avant, mais aussi tirer parti de la résilience de l'équilibrage de la charge du serveur Web qui est fourni avec cette nouvelle configuration?

Répondre

8

Ayende blogged sur l'utilisation du cache de 2ème niveau dans NHibernate. Vous devrez utiliser un cache distribué dans un scénario de batterie de serveurs Web. Par exemple SysCache2 (qui repose sur le cache ASP.NET et qui peut être configuré pour utiliser un fournisseur distribué) ou MemCache. Voici an article illustrant comment vous pouvez configurer memcached.

+0

merci pour les liens car ce sont des articles fantastiques. J'ai encore quelques questions. 1. Où ce cache devrait-il fonctionner (sur l'un des serveurs web ou ai-je besoin d'un autre serveur pour cette mise en cache)? Si cela doit être une autre machine, cela ne va-t-il pas être plus lent étant donné que j'ai maintenant besoin d'un saut de réseau pour atteindre le cache? – leora

+0

@ooo, idéalement, il devrait être une autre machine avec beaucoup de mémoire. Vous pouvez également utiliser vos serveurs Web, mais en général, ce n'est pas recommandé. –

+0

Qu'en est-il du point d'avoir un saut de réseau supplémentaire pour accéder au cache (par opposition à être sur la même machine). Aussi, cette nouvelle machine devrait-elle être simplement dédiée à être une machine cache? – leora

1

Eh bien, j'ai utilisé memcached et cela fonctionne comme un charme. Vous devrez peut-être modifier la taille du cache, mais à part ça, c'est sans tracas. Installez un nœud sur chaque nœud de serveur Web et maintenez cette configuration lorsque vous additionnez les nœuds

Questions connexes