Castle Windsor's Interceptors を使用してデータをキャッシュし、asp.net サイトのスケーリングを支援することを検討しています。
誰かがこれを行うことについて考え/経験を持っていますか?
軽微な説明: 私の意図は、Windsor を使用して「高価な」呼び出しをインターセプトし、キャッシング自体を MemCacheD または Velocity (または別の分散キャッシュ) に委任することでした。
Castle Windsor's Interceptors を使用してデータをキャッシュし、asp.net サイトのスケーリングを支援することを検討しています。
誰かがこれを行うことについて考え/経験を持っていますか?
軽微な説明: 私の意図は、Windsor を使用して「高価な」呼び出しをインターセプトし、キャッシング自体を MemCacheD または Velocity (または別の分散キャッシュ) に委任することでした。
こんにちは、こちらの記事 ( http://www.davidhayden.com/blog/dave/archive/2007/03/14/CastleWindsorAOPPolicyInjectionApplicationBlock.aspx ) と上記の記事に基づいて、キャッスル ウィンザー インターセプターを使用しました。
全体が非常に簡単で、AOP を実行するための非常にエレガントな方法であることがわかりました。でも....
ただし、パフォーマンスには注意してください。インターセプトを使用すると、確実に速度が低下する動的プロキシが作成されます。500 ノードのコンピューティング ファームを使用したベンチマークに基づくと、Windsor でインターセプトを使用することにより、約 30% のパフォーマンスの低下が見られました。これは、インターセプト内で行っていたことの範囲外でもありました (基本的に、メソッド呼び出しとメソッドに渡されたパラメーターのログ記録)。 . インターセプトを削除するだけで、アプリ全体がかなり高速化されました。
高価な通話を非常に高価にしないように注意してください。:) もし私があなただったら、おそらく IRepository 型パターンを実装し、適切な場合はさまざまなキャッシュ戦略でそれをバックアップすることによって、別のレベルでキャッシュすることを検討します。
幸運を、
--
マット。
私は Windsor でキャッシング デコレーター (インターセプターではない) を使用してきましたが、うまく機能します。
インターセプターはこれにも適しています。たとえば、これを参照してください。
データアクセスをどのように実装していますか?NHibernateを使用している場合は、ここでキャッシュすることをお勧めします。NHibernateには、.NET組み込みキャッシュ、memcached(NMemcachD経由)およびVelocityのキャッシュ戦略が付属しています。私はmemcachedをエンタープライズレベルのアプリケーションに広く使用してきましたが、問題はありませんでした。
インターセプターベースのキャッシングメカニズムは興味深いアイデアであり、私がこれまで考えたことのないものです。透過的に適用するのは非常に簡単です。CastleのAOP機能を使用するのが好きだと思うのは、プロキシベースであるため、属性でコードを汚染する必要がないためです。
I created on open source project named cachew.castlewindsor with a caching interceptor. It is a general purpose solution for caching.
Here is a simple example of usage:
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>());
The default behaviour is to cache all methods that starts with Get and return data, but you can also change what prefixes to cache.
The project is available on nuget: http://www.nuget.org/packages/Cachew.CastleWindsor/
And the source code is available here: https://github.com/kobbikobb/Cachew
私はMicrosoft Velocityを見たいと思います。エンタープライズ アプリケーションの作成を計画している場合は、これが適切なソリューションになる可能性があります。
Windsor は優れていますが、データをキャッシュする方法がいくつか組み込まれている場合に、それをキャッシュに使用する必要はありません。Windsor は、必ずしもキャッシングとは限らない他の分野に基盤を持っています。キャッシュ オブジェクトからセッション、Cookie まで。キャッシュには多くの方法があります。さらに重要なことは、大規模なアプリケーションでは分散キャッシュが必要になることです。MS はそのための製品に取り組んでおり、製品を市場に出している優れたベンダーがいくつかあります。