8

Mi configuración anterior era un único servidor web y un único servidor de base de datos. Estaba usando el almacenamiento en caché de segundo nivel de nhibernate para almacenar cosas en la memoria caché para evitar que muchas llamadas vayan a la base de datos. Esto ha funcionado muy bien, ya que estaba usando este esta asambleaNhibernate Problemas/preguntas de caché de segundo nivel cuando se mueve de un servidor web único a un entorno de carga de servidor web múltiple

nhibernate.caches.syscache 

y ha añadido este código para activar el almacenamiento en caché de segundo nivel (utilizando el proveedor syscache regular):

 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(); 

ahora he migrado hacia un nuevo entorno que tiene múltiples servidores web y estoy tratando de entender las implicaciones de esto (todavía tengo un solo servidor db).

Dado que la memoria caché se almacenaba en el servidor web antes, ahora parecería que tengo 2 cachés paralelos en cada servidor web que a su vez pueden no estar en sintonía y puede causar cambios de fecha, etc.

Lo ¿Es la mejor solución para obtener los beneficios del almacenamiento en caché que tenía antes, pero también aprovechar la flexibilidad del equilibrio de carga del servidor web que se proporciona con esta nueva configuración?

Respuesta

8

Ayende blogged sobre el uso del segundo nivel de caché en NHibernate. Tendrá que usar un caché distribuido en un escenario de granja web. Por ejemplo, SysCache2 (que se basa en caché ASP.NET y que podría configurarse para usar un proveedor distribuido) o MemCache. Aquí está an article que ilustra cómo se puede configurar memcached.

+0

gracias por los enlaces, ya que son excelentes artículos. Todavía tengo algunas preguntas. 1. ¿Dónde debe ejecutarse este caché (en uno de los servidores web o ahora necesito otro servidor para este almacenamiento en caché). Si tiene que ser otra máquina, ¿no va a ser más lento dado que ahora necesito un salto de red para alcanzar la caché? – leora

+0

@ooo, idealmente debería ser otras máquinas con mucha memoria. También puede usar sus servidores web, pero en general no es recomendable. –

+0

¿qué pasa con el punto de tener un salto de red adicional para llegar a la memoria caché (frente a estar en la misma máquina). Además, debería esa nueva máquina solo dedicarse a ser una máquina de caché. – leora

1

Bueno, he usado memcached y funciona a las mil maravillas. Puede que tenga que ajustar el tamaño de la memoria caché, pero aparte de eso, es sin problemas. Configure un nodo memached en cada nodo del servidor web y mantenga esa configuración a medida que agrega nodos

Cuestiones relacionadas