我正在研究将AppFabric用作我们数据的数据缓存的可行性。我们的数据是:
它拥有大约1亿个成员,其中一个更新将影响2-10个成员,然后需要在缓存中更新;缓存每天更新100k-500k次。
我的服务器有128GB的RAM。
我对使用缓存的垃圾收集和延迟感到担忧。
实际上我不希望垃圾收集清除任何缓存的数据 - 它需要存活直到我刷新它。 (我们知道何时需要对缓存进行更新)AppFabric可以实现这一点吗?我希望这些数据中的一些可以保持数天 - 一次一年。
答案 0 :(得分:2)
AppFabric缓存不是为“Scaling Up”设计的,而是为“Scaling Out”设计的。
内存现在非常便宜,网卡速度非常快。 AppFabric Cache适用于通常用于Web服务器的低成本机器,而不是需要昂贵硬件的数据库服务器。 AppFabric是IO绑定的,不受CPU限制,除非您有大量的大数据项。
缓存大小影响较小,但写入百分比较高的大缓存除外。除其他因素外,当托管堆的大小很大时,高写入工作负载会给.NET垃圾回收带来更大的压力。
因此,最好跨越多个中型服务器。 您将获得更好的延迟,并且可以实现高可用性。
阅读你的问题,我认为你对对象的生命周期感到困惑。 AppFabric将仅在两个环境中删除您的对象:
<强>过期强>
将项添加到缓存时,可以为特定的缓存对象设置可选对象超时值,以确定它将在缓存中驻留多长时间。可以为命名缓存关闭它。
<强>逐出强>
作为内存缓存,AppFabric不会将缓存持久保存到磁盘。这意味着,内存有限,并且缓存大小不能超过某个限制,这可能是服务器可用的总内存或配置的最大缓存大小。 当缓存服务器上的缓存服务的内存消耗超过低水印阈值(70%)时,AppFabric开始逐出已经过期的对象
这里有什么重要的,你不能假设一个对象永远留在AppFabric中。
Grid Dynamics已完成Windows Server AppFabric Cache的性能和可伸缩性分析。用于分析的数据是从大量使用不同使用模式,工作负载和缓存配置进行的测试中收集的。本白皮书介绍了该研究的结果,并介绍了一些常见的用例,可用于您的应用程序的容量规划。下载here和源代码here。
自1.1版以来,Appfabric现在支持Read-Through and Write-Behind。这也可以帮到你。
答案 1 :(得分:0)
如果正确配置服务器,垃圾收集将不会成为问题。您可以配置项目过期所需的时间,缓存中的对象是否过期,驱逐是否开启等等。您甚至可以锁定缓存中的项目,以便它们在您使用时不会过期他们。此页面here解释了到期和驱逐。