繁体   English   中英

使用azure缓存表现不佳

[英]poor performance with azure cache

在将几个数据库调用切换到缓存之后,我们的性能实际上更差。 根据新的文物,我们注意到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太棒了。 拥有闪亮的快速缓存层(能够远远超过4GB),从我们的数据库中获得了巨大的负担。

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

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

网络配额有三种变化:

  • 交易
  • 带宽
  • 并发连接

在您的性能测试中,我怀疑并发连接限制应该归咎于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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM