0

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

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

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

我的服务器有 128GB 的​​ RAM。

我担心垃圾收集和缓存延迟。

实际上,我不希望垃圾收集清除任何缓存的数据——它需要一直存在,直到我刷新它。(我们知道何时需要更新缓存)AppFabric 可以做到这一点吗?其中一些数据我想坐几天——一次一年。

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

2 回答 2

2

AppFabric 缓存不是为“向上扩展”而设计的,而是为“向外扩展”而设计的。

现在内存很便宜,网卡也很快。AppFabric Cache 在通常用于 Web 服务器的低成本机器上运行良好,而不是需要昂贵硬件的数据库服务器。AppFabric 是 IO 密集型的,而不是 CPU 密集型的,除非您有大量的大型数据项。

缓存大小的影响很小,但写入百分比很高的大型缓存除外。除其他因素外,当托管堆的大小很大时,高写入工作负载会给 .NET 垃圾收集带来更大的压力。

因此,最好跨越多个中型服务器。您将有更好的延迟,并且可以启用高可用性。

阅读您的问题,我认为您对对象的生命周期感到困惑。AppFabric 只会在两种情况下删除您的对象:

到期

将项目添加到缓存时,可以为特定的缓存对象设置一个可选的对象超时值,该值将确定它将在缓存中驻留多长时间。可以为命名缓存关闭它。

驱逐

作为内存缓存,AppFabric 不会将缓存持久化到磁盘。这意味着,内存是有限的,缓存大小不能超过某个限制,这可能是服务器可用的总内存或配置的最大缓存大小。当缓存服务器上缓存服务的内存消耗超过低水位线阈值(70%)时,AppFabric 开始驱逐已经过期的对象

这里重要的是,你不能假设一个对象会永远留在 AppFabric 中

Grid Dynamics 已完成对 Windows Server AppFabric 缓存的性能和可扩展性分析。用于分析的数据是从使用不同的使用模式、工作负载和缓存配置进行的大量测试中收集的。本白皮书介绍了研究结果并涵盖了一些常见用例,可用于您的应用程序的容量规划。在此处下载并在此处下载源代码。

从 1.1 版开始,Appfabric 现在支持Read-Through 和 Write-Behind。这也可能对您有所帮助。

于 2013-05-23T11:19:42.083 回答
0

如果您正确配置服务器,垃圾收集将不会成为问题。您可以配置项目需要多长时间过期,缓存中的对象是否可以过期,是否启用驱逐等。您甚至可以锁定缓存中的项目,以便它们在使用时不会过期他们。这个页面在这里解释了过期和驱逐。

于 2013-05-23T10:35:56.213 回答