Виндзорские перехватчики АОП и кеширование - PullRequest
7 голосов
/ 18 сентября 2008

Я рассматриваю возможность использования перехватчиков Castle Windsor для кэширования данных, чтобы помочь масштабировать сайт asp.net.

У кого-нибудь есть мысли / опыт с этим?

Незначительное уточнение: Я намеревался использовать Windsor для перехвата «дорогих» вызовов и делегирования в MemCacheD или Velocity (или другой распределенный кеш) для самого кеширования.

Ответы [ 6 ]

4 голосов
/ 13 октября 2008

Привет, мы использовали перехватчики Castle Windsor, основанные на этой статье: http://www.davidhayden.com/blog/dave/archive/2007/03/14/CastleWindsorAOPPolicyInjectionApplicationBlock.aspx, а также упомянутый выше.

Я нашел все это довольно легко, и это очень элегантный способ сделать АОП. Однако ....

Осторожнее с производительностью. Использование перехвата создает динамический прокси, который определенно замедлит работу. Основываясь на наших тестах с использованием вычислительной фермы 500 Node, мы увидели снижение производительности примерно на 30% при использовании перехвата в Виндзоре, это было за пределами того, что мы делали и внутри перехвата (по сути, регистрация вызовов методов и параметров, передаваемых нашим методам) , и просто удаление перехвата ускорило все приложение.

Осторожно, вы не делаете свои дорогие звонки действительно дорого. :) Если бы я был тобой, я бы посмотрел на кеширование на другом уровне, возможно, реализовав шаблон типа IRepository, а затем поддерживая его различными стратегиями кеширования, где это уместно.

Удачи,

-
Мэтт.

2 голосов
/ 24 сентября 2008

Я использовал кеширующие декораторы (не перехватчики) с Виндзором, и они прекрасно работают.

Перехватчики также хороши для этого, см., Например, this .

1 голос
/ 18 сентября 2008

Как вы реализуете свой доступ к данным? Если вы используете NHibernate, я бы предложил кеширование здесь. NHibernate поставляется со стратегиями кэширования для встроенного кэша .NET, memcached (через NMemcachD) и Velocity. Я широко использовал memcached для приложений уровня предприятия, и у меня не было с этим проблем.

Механизм кэширования на основе перехватчика - интересная идея, о которой я раньше не думал. Было бы очень легко прозрачно применить. Единственное, что мне нравится в использовании функций AOP в Castle - это то, что он основан на прокси, вам не нужно загрязнять свой код атрибутами.

0 голосов
/ 29 октября 2014

Я создал проект с открытым исходным кодом с именем cachew.castlewindsor с перехватчиком кэширования. Это универсальное решение для кеширования.

Вот простой пример использования:

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

Поведение по умолчанию - кэшировать все методы, которые начинаются с получения и возврата данных, но вы также можете изменить префиксы для кэширования.

Проект доступен на nuget: http://www.nuget.org/packages/Cachew.CastleWindsor/

И исходный код доступен здесь: https://github.com/kobbikobb/Cachew

0 голосов
/ 18 сентября 2008

Я бы посмотрел на Microsoft Velocity . Если вы планируете создать приложение Enterprise, это может быть хорошим решением

0 голосов
/ 18 сентября 2008

Виндзор великолепен, но зачем использовать это для кеширования, когда у вас есть несколько встроенных способов кеширования данных. Виндзор имеет свою основу в других областях, не обязательно кэширование. Из объекта кеша в сессию в куки. Есть много способов кеширования. Что еще более важно в больших приложениях, вы в конечном итоге нуждаетесь в распределенном кэшировании. MS работает над продуктом для этого, и есть пара хороших продавцов, у которых есть продукты на рынке.

...