我们在运行ASP.NET的Web场中使用什么进行分布式缓存?
我对其他人在这种情况下正在使用感到好奇。我知道其中有几个选项,例如内存缓存端口或者ScaleOutSoftware。 memcached端口似乎没有被积极地使用(如果我错了,请纠正我)。 ScaleOutSoftware对我来说太昂贵了(我毫不怀疑这是值得的)。这并不是说我不想听到有人使用memcached或者ScaleOutSoftware。我只是在此说明我"知道"的内容。
所以我的问题基本上是这样的:对于那些主动使用分布式缓存的人,我们正在使用什么,对它感到满意,我应该注意什么?
我很快就要搬到两台服务器...两者都将在同一位置。我使用大量缓存(但要小心)以减少数据库服务器上的负载。
编辑:我下载了Scaleout软件的解决方案。我已经为它编写了代码,它似乎工作得很好。我只需要决定我的钱包是否会与现金分开。 :)使用ScaleoutSoftware的人有好有坏吗?
再次编辑:自从我问了这已经有一段时间了吗?还有其他想法吗?我们最终从ScaleOutSoftware购买了该解决方案,并对此感到满意,但我很好奇其他人在做什么。
解决方案
我们使用Windows的memcached端口,对此感到非常满意。 enyim.com memcached客户端API非常好且易于使用。如果我们问我,它也是开源的,这是一个很大的优势。
现在,我们在生产型网络应用程序中使用了此设置,它对改善性能起到了很大的帮助。
Microsoft有一个待定的产品,代号为Velocity。它仍处于CTP中,并且运行缓慢,但是看起来会很好。我们将在不久的将来击败它,看看它如何处理我们想要做的事情(每小时> 200万次读/写)。将回传结果。
我们在生产环境(www.funda.nl)中将memcached与enyim库一起使用。工作正常,对此感到非常满意,但是我们确实注意到客户端上的CPU使用量大量增加。大概是由于进行了序列化/反序列化。我们每秒大约读取1000次。
在Codeplex上可以找到一个很棒的.NET包装器/端口。很棒的酱!
基于在Windows服务中重新托管ASP.NET缓存,我们当前使用的是我在几个小时内编写的非常简单的缓存(更多信息和源代码在此处)。我不会假装它像Memcached这样优化过的东西,但是我们只是在寻找简单而免费的东西,直到Velocity出现为止,即使在相当重的负载下它也能保持得很好。
归结于我们个人对核心组件的偏爱,即那些会影响该站点是否可用的组件,它们是(a)具有快速和高质量支持历史的供应商支持的,还是(b)由我们编写的如果出现问题,我们可以迅速修复。开源是一件好事,确实,我们确实使用了一些OSS,但是不幸的是,如果站点处于离线状态,那么新闻组等就不会有1小时的SLA,仅仅是因为它是OSS并不意味着我们有必要的了解或者自己修复的能力。
有一个100%本机.NET,有据可查的开放源代码(LGPL)项目,称为共享缓存。看起来SO上尚未提到它,但是它很有希望,并且应该能够满足大多数人对分布式缓存的期望。它甚至支持不同的策略,例如分布式或者复制缓存等。
我将有机会在实际项目中尝试后,将用更多详细信息更新此帖子。