Pregunta

Estoy considerando usar los interceptores de Castle Windsor para almacenar en caché los datos y ayudar a escalar un sitio asp.net.

¿Alguien tiene alguna idea/experiencia al hacer esto?

Aclaración menor:Mi intención era utilizar Windsor para interceptar llamadas "caras" y delegar en MemCacheD o Velocity (u otro caché distribuido) el almacenamiento en caché.

¿Fue útil?

Solución

He estado usando decoradores de almacenamiento en caché (no interceptores) con Windsor y funcionan muy bien.

Los interceptores también son buenos para esto, ver este Por ejemplo.

Otros consejos

Hola, hemos utilizado interceptores Castle Windsor, según este artículo: http://www.davidhayden.com/blog/dave/archive/2007/03/14/CastleWindsorAOPPolicyInjectionApplicationBlock.aspx así como el mencionado anteriormente.

Todo esto me pareció bastante fácil y es una forma muy elegante de hacer AOP.Sin embargo....

Pero cuidado con la actuación.El uso de la interceptación crea un proxy dinámico que definitivamente ralentizará las cosas.Según nuestros puntos de referencia utilizando una granja de computación de 500 nodos, vimos una disminución del rendimiento de aproximadamente el 30 % al usar la intercepción en Windsor, esto estaba fuera de lo que estábamos haciendo también dentro de la intercepción (esencialmente, registrar llamadas a métodos y parámetros pasados ​​a nuestros métodos). .y simplemente eliminar la intercepción aceleró bastante toda la aplicación.

Cuidado, no hagas tus costosas llamadas. en realidad caro.:) Si yo fuera usted, buscaría almacenar en caché en un nivel diferente, probablemente implementando un patrón de tipo IRepository y luego respaldándolo con varias estrategias de almacenamiento en caché cuando corresponda.

Buena suerte,

--
Mate.

¿Cómo está implementando su acceso a los datos?Si usa NHibernate, le sugeriría almacenar en caché aquí.NHibernate viene con estrategias de caché para el caché integrado .NET, memcached (a través de NMemcachD) y Velocity.He usado Memcached extensivamente para aplicaciones de nivel empresarial y no he tenido ningún problema con él.

Un mecanismo de almacenamiento en caché basado en interceptores es una idea interesante, en la que no había pensado antes.Sería muy fácil aplicarlo de forma transparente.Lo que me encanta de usar las funciones AOP de Castle es que está basado en proxy, no tienes que contaminar tu código con atributos.

Yo miraría el Velocidad de Microsoft.Si planea crear una aplicación empresarial, esta podría ser una buena solución.

Creé en un proyecto de código abierto llamado cachew.castlewindsor con un interceptor de almacenamiento en caché.Es una solución de propósito general para el almacenamiento en caché.

A continuación se muestra un ejemplo sencillo de uso:

var container = new WindsorContainer(); container.Register(Component.For<CacheInterceptor>() .Instance(new CacheInterceptor(new Cache(TimeoutStyle.RenewTimoutOnQuery, TimeSpan.FromSeconds(3))))); container.Register(Component.For<IServer>().ImplementedBy<Server>().Interceptors<CacheInterceptor>());

El comportamiento predeterminado es almacenar en caché todos los métodos que comienzan con Obtener y devolver datos, pero también puede cambiar qué prefijos se almacenarán en caché.

El proyecto está disponible en nuget:http://www.nuget.org/packages/Cachew.CastleWindsor/

Y el código fuente está disponible aquí:https://github.com/kobbikobb/Cachew

Windsor es genial, pero ¿por qué usarlo para el almacenamiento en caché cuando tiene varias formas integradas de almacenar datos en caché?Windsor tiene su base en otras áreas, no necesariamente en el almacenamiento en caché.Del objeto de caché a la sesión y a las cookies.Hay muchas formas de almacenar en caché.Más importante aún, en aplicaciones grandes terminas necesitando almacenamiento en caché distribuido.MS está trabajando en un producto para eso y hay un par de buenos proveedores que tienen productos en el mercado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top