2014-03-12 42 views
5

在我们仍在开发的项目中,我们注意到访问我们的ASP.NET Web API服务时突然出现延迟。我们使用真棒Mini Profiler指出,这些延迟是由于与Azure数据缓存(预览)服务的连接断开而必须重新建立时引起的。这个过程大约需要3.3秒。重新连接后,从缓存中获取对象需要1.4 ms。连接到Azure缓存服务大约需要3.3秒

当我将maxConnectionsToServer从1增加到20时,我注意到了另一件事。如果我不向Web API发出1或2分钟的请求(通常是连接断开时),然后开始拨打电话,接下来的20个请求会延迟3.3秒,这就是连接池的工作原理,我猜(round - 从池中取出连接)。

Web API和Caching服务都位于美国东部地区,我们禁用了本地缓存,禁用了SSL,启用了自动发现功能。

所以,我想知道如果我们的配置有什么问题,或者这是一件事情,因为Azure缓存仍在预览中?

任何信息将被评估。

谢谢!

回答

0

听起来好像您的共享缓存由于不活动而被卸载。测试此方法的一种方法是将角色内缓存添加到现有服务(如果可用)并将缓存使用情况交换到此新缓存。角色缓存描述为here

一旦高速缓存移出共享产品,等待1-2分钟的空闲时间并重试连接,则延迟不应存在。

假设您想在隔离问题后坚持使用共享缓存选项,我目前唯一的解决方法是运行一个后台任务,该任务将周期性地ping缓存以保持其活动状态。

如果您正在运行完整的Web角色,则可以在应用程序启动时启动后台任务。
如果您通过移动服务部署,则可以通过预定作业运行“ping”。您可能遇到的唯一问题是预定作业的最短时间为1分钟,这可能不够积极,无法保证您的缓存在100%的时间内保持活跃状态​​。

+0

感谢您的回复。我们不使用共享缓存服务,而是使用新的Azure缓存:http://msdn.microsoft.com/en-us/library/windowsazure/dn386094.aspx –

+0

我应该澄清 - 您选择的层次决定了您的缓存是共享的或专用的。如果您正在基本层下运行,则可以在共享硬件上运行,如果您选择了在专用硬件上运行的标准层或高级层。层详细信息在这里:http://msdn.microsoft.com/en-us/library/windowsazure/dn386114.aspx。 – MOverlund

+0

试用标准产品 - 同样的事情。连接需要约3秒钟才能建立。 –

0

我没有看到指向你做错任何事情。这可能是Azure真正遇到问题,快速获取缓存连接并运行。根据几个最佳实践文档和MSDN帖子,您希望增加与缓存的连接数量,以便将故障转移到活动连接,这些配置更改可有效完成。

尝试确保您的缓存访问器是一个静态对象(另一个MSDN建议),这可能是一个长镜头,但可以考虑使用Sliding Window选项来访问对象,并查看它是否不仅告知对象存储的倒计时重置,还会提示缓存服务重置连接。