在具有128 GB RAM的服务器上运行AppFabric - 延迟和垃圾收集

时间:2013-05-23 00:08:38

标签: .net iis garbage-collection appfabric

我正在研究将AppFabric用作我们数据的数据缓存的可行性。我们的数据是:

  • 每天访问400万次
  • 每天更新50k次。
  • 每天搜索500k次。

它拥有大约1亿个成员,其中一个更新将影响2-10个成员,然后需要在缓存中更新;缓存每天更新100k-500k次。

我的服务器有128GB的RAM。

我对使用缓存的垃圾收集和延迟感到担忧。

实际上我不希望垃圾收集清除任何缓存的数据 - 它需要存活直到我刷新它。 (我们知道何时需要对缓存进行更新)AppFabric可以实现这一点吗?我希望这些数据中的一些可以保持数天 - 一次一年。

  • 当您运行多GB的DataCache时,延迟会增加多少?
  • AppFabric可以在Master / Master模型中工作吗?您正在运行5个容纳缓存的服务器,如果有更新,那么该更新会传播到其他服务器吗?

2 个答案:

答案 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解释了到期和驱逐。