gpt4 book ai didi

appfabric - AppFabric:大群集比小群集响应慢

转载 作者:行者123 更新时间:2023-12-02 04:10:57 31 4
gpt4 key购买 nike

我正在使用AppFabric在我的网站上进行缓存。我们最近在缓存集群中添加了更多主机,由于在[中]将来可能会添加更多主机,因此我们决定将集群重新配置为大型集群,而不是小型集群。现在,我们看到了一些令人不安的副作用-即AppFabric重新启动后需要很长时间才能恢复。

好的,所以,如果您到此为止,我已经引起您的注意,我可以告诉您完整的故事:O)。重新启动后,AppFabric总是需要很长时间才能恢复,但是我们能够为此进行配置和编码,因此我们的用户不会受到不利影响。在web.config中,我们有:

<dataCacheClient channelOpenTimeout="5" requestTimeout="1000" >
<!-- cache host(s) -->
<hosts>
<host name="localhost" cachePort="22233"/>
</hosts>
</dataCacheClient>

如果哪一个(除非我对文档有误解)会导致AppFabric客户端在1秒钟内未收到响应的情况下引发异常。在我们的代码中,我们将处理此问题,然后退回到读取我们试图直接从数据库读取的数据:
public object Get(object key)
{
if ( key == null )
{
return null;
}

try
{
return cache[key.ToString()];
}
catch ( CacheException ex )
{
if ( ex.ErrorCode == DataCacheErrorCode.ConnectionTerminated || ex.ErrorCode == DataCacheErrorCode.RetryLater || ex.ErrorCode == DataCacheErrorCode.Timeout )
{
// Calling code should try reading from the database instead
return null;
}
else
{
throw;
}
}
}

由于我们已经开始使用大型集群配置,因此dataCacheClient配置条目的requestTimeout属性似乎没有任何影响。发出Restart-CacheCluster命令后,我们的网站将在3到5分钟之间停止响应,这大约是群集当前在重新启动后重新恢​​复所需的时间。

为了进一步解决此问题,我在本地计算机上进行了一些测试,以查看在各种状态下用AppFabric进行完全刷新([ctrl] [f5])后网站主页加载所花费的时间。结果如下(时间是平均时间,以秒为单位):

小型快取:11.4462
小型缓存:12.4346
重新启动小型快取:11.5794
小型缓存重新启动[1]:14.99

大型快取:11.5534
大量快取:16.576
大型缓存重新启动:59.4582
大型高速缓存已重新启动[1]:62.9526

从上面的结果可以看出,正常加载首页所花费的时间与重新启动AppFabric之后所花费的时间之间存在显着差异。

如果您想知道为什么我们要完全重新启动集群,有时为了使值(例如具有非常大的TTL的设置)的更改立即生效而希望使缓存无效。

[1]第二次重启测试是从web.config中删除了channelOpenTimeout和requestTimeout属性的

最佳答案

您始终可以枚举所有缓存项并将其从缓存中删除。这样,您无需重新启动缓存即可实现目标。

DataCache cache; // TODO: initialize
foreach (var regionName in cache.GetSystemRegions())
{
Trace.WriteLine(string.Format("Enumerating objects in region '{0}'", regionName));
foreach (var item in cache.GetObjectsInRegion(regionName))
{
Trace.WriteLine(string.Format("Removing cache item '{0}'", item.Key));
cache.Remove(item.Key);
}
}

同样,小型高速缓存群集表示1-5个高速缓存服务器,而大型高速缓存群集表示超过15个高速缓存服务器。重新启动群集时,这意味着它必须在所有这些机器上停止AppFabricCachingService,等待所有机器停止然后再启动所有机器并等待所有这些。

关于appfabric - AppFabric:大群集比小群集响应慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5226086/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com