使用azure缓存表现不佳

在将几个数据库调用切换到缓存之后,我们的性能实际上更差。 根据新遗物,我们注意到CLR时间和响应时间大幅增加。 跳转请参见附图(缓存在0:00引入1/5)。 唯一改变的是Azure App Fabric Cache的引入。 我们的缓存客户端使用单例模式,因此只有一个用于Web服务的实例。 缓存工厂创建一次然后存储起来,这样我们就不会每次都打开连接的开销。

在此处输入图像描述

此外,NewRelic报告缓存平均需要15毫秒。 在许多情况下,15ms可能比数据库慢!

nto我们坚持的对象是缓存两个字节数组的构成,一个长度约为421,另一个长度为8。

没有真正理解为什么引入缓存会增加响应时间。 字节数组是否不缓存友好?

我的类看起来像这样(在被推入类之前填充的唯一两个属性是两个字节数组,其他所有内容都保留为默认值)

[Table] public class GameState { [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)] public int Id { get; set; } [Column(UpdateCheck = UpdateCheck.Never, Name = "game_id")] public int GameId { get; set; } [Column(UpdateCheck = UpdateCheck.Never, Name = "player_id")] public int PlayerId { get; set; } [Column(UpdateCheck = UpdateCheck.Never, DbType = "VarBinary(max)")] //has a length around 421 public byte[] State { get; set; } [Column(UpdateCheck = UpdateCheck.Never, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)] public DateTime Created { get; set; } [Column(UpdateCheck = UpdateCheck.Never, Name = "update", IsDbGenerated = true, DbType = "timestamp")] //has a length of 8 public byte[] TimeStamp { get; set; } } 

谢谢

UPDATE

我们与几位微软工程师进行了交谈,没有人能够帮助我们解决为什么这么慢。 一位工程师报告说,缓存层是在SQL Azure之上构建的,它解释了高请求时间。 另一位工程师否认了这一说法,但并不确定如何实施共享缓存。

我们永远无法让azure缓存快速运行并最终从Azure切换到Amazon ec2。 一旦使用类似硬件的亚马逊ec2,我们的响应时间就下降到大约60-70毫秒。

对于其他人来说,这是我们在交换机中学到的。

SQL Azure是共享数据库托管。 你没有自己的数据库,你在一个服务器上有很多其他数据库,如果你有任何类型的流量,你将受到限制。 他们不断告诉我们一些购票成功故事,但在那种情况下,他们有750个DB来处理交易。 分片并不好玩,更好的成功故事是你用1DB处理了所有这些请求。

我们使用SSL,让IIS管理SSL真的会杀死你的CPU。 亚马逊有你的ELB做ssl然后你的IIS盒子没有。 这释放了IIS框以更快地处理请求。

亚马逊让你运行memcache。 Memcache太棒了。 拥有shiny的快速缓存层(能够远远超过4GB),从我们的数据库中获得了巨大的负担。

我们在2012年1月进行了切换,因此它可能的Azure在去年变得更好,但是我没有计划给它第二次机会。

Azure Cache的性能并不令人满意。 基本上是因为Azure Cache在通信时有自己的负载平衡。 但您可以尝试启用本地缓存function,这将提高负载性能。

网络配额有三种变化:

  • 交易
  • 带宽
  • 并发连接

在您的性能测试中,我怀疑并发连接限制是由MSDN引起的:

每个缓存产品对可以同时打开到同一缓存的连接数有不同的限制…使用Windows Azure缓存的应用程序必须了解如何打开连接到缓存服务的连接。 每个缓存产品对可以同时打开到同一缓存的连接数有不同的限制。

来源: https : //azure.microsoft.com/en-us/documentation/articles/cache-dotnet-how-to-use-service/

如果这没有多大帮助,那么您可以考虑比较不同的并发模型。 AppFabric支持乐观和悲观的并发模型,有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ee790890.aspx 。