使用Azure CDN会导致性能降低吗?

9
我已经尝试了Azure的CDN很多次,使用Web角色成功设置后,我以为一切都安全了。

为什么选择Web角色?

嗯,我想要压缩和缓存头文件的好处,但是我没有成功地使用普通的blob方式获得它们。作为额外的奖励,大小写限制也被消除了。

关于CDN服务的选择就说这么多吧;虽然之前所有内容都是从同一个域名提供的,但现在我几乎所有的“静态”内容都是从cdn.cuemon.net提供的。理论上,这应该提高性能,因为浏览器可以将内容获取并行分布在“多个”域名上,而不是仅在一个域名上。

不幸的是,这导致了性能下降,我认为这与内容被提供之前的许多跳有关(使用tracert命令):

C:\Windows\system32>tracert -d cdn.cuemon.net

Tracing route to az162766.vo.msecnd.net [94.245.68.160]
over a maximum of 30 hops:

  1     1 ms     1 ms     1 ms  192.168.1.1
  2    21 ms    21 ms    21 ms  87.59.99.217
  3    30 ms    30 ms    31 ms  62.95.54.124
  4    30 ms    29 ms    29 ms  194.68.128.181
  5    30 ms    30 ms    30 ms  207.46.42.44
  6    83 ms    61 ms    59 ms  207.46.42.7
  7    65 ms    65 ms    64 ms  207.46.42.13
  8    65 ms    67 ms    74 ms  213.199.152.186
  9    65 ms    65 ms    64 ms  94.245.68.160

C:\Windows\system32>tracert cdn.cuemon.net

Tracing route to az162766.vo.msecnd.net [94.245.68.160]
over a maximum of 30 hops:

  1     1 ms     1 ms     1 ms  192.168.1.1
  2    21 ms    22 ms    20 ms  ge-1-1-0-1104.hlgnqu1.dk.ip.tdc.net [87.59.99.217]
  3    29 ms    30 ms    30 ms  ae1.tg4-peer1.sto.se.ip.tdc.net [62.95.54.124]
  4    30 ms    30 ms    29 ms  netnod-ix-ge-b-sth-1500.microsoft.com [194.68.128.181]
  5    45 ms    45 ms    46 ms  ge-3-0-0-0.ams-64cb-1a.ntwk.msn.net [207.46.42.10]
  6    87 ms    59 ms    59 ms  xe-3-2-0-0.fra-96cbe-1a.ntwk.msn.net [207.46.42.50]
  7    68 ms    65 ms    65 ms  xe-0-1-0-0.zrh-96cbe-1b.ntwk.msn.net [207.46.42.13]
  8    65 ms    70 ms    74 ms  10gigabitethernet5-1.zrh-xmx-edgcom-1b.ntwk.msn.net [213.199.152.186]
  9    65 ms    65 ms    65 ms  cds29.zrh9.msecn.net [94.245.68.160]

正如您从上面的路由跟踪中所看到的,所有外部内容都会延迟相当长的时间。值得注意的是,Azure服务设置在北欧地区,而我定居在丹麦,为什么这个路由跟踪有些过分呢?
另一个问题可能是Web角色是两个额外的小实例;我还没有找到时间尝试使用两个小实例,但我知道Microsoft将额外的小实例限制在5Mb/s的WAN上,其中小型和以上具有100Mb/s。
我只是不确定CDN是否也适用于此。
无论如何 - 任何帮助和/或解释都将不胜感激。
让我声明,我对Azure平台非常满意 - 我只是对上述问题感到好奇。
更新
没有-d选项的新tracert。

受到user728584的启发,我进行了研究并找到了这篇文章http://blogs.msdn.com/b/scicoria/archive/2011/03/11/taking-advantage-of-windows-azure-cdn-and-dynamic-pages-in-asp-net-caching-content-from-hosted-services.aspx,我将进一步研究公共缓存控制和CDN。

这并没有解释过多跳数的现象,但我希望有经验的网络专业人士能够帮助揭开这个问题的真相。

请放心,我会根据我的发现及时告知您。


1
你的 Web 角色是从 CDN 拉取数据并将其传递给用户,还是仅提供 HTTP 页面,用户的浏览器从 CDN 请求静态内容? - David Z.
我在Web角色中唯一要做的就是在ASP.NET生命周期中挂接到适当的事件;这将添加适当的缓存标头和压缩,其中所有内容都从/cdn文件夹“提供”。 - gimlichael
很酷,我自己也非常感兴趣,期待更新! - user728584
2个回答

4
我假设您已经将Cache-Control HTTP头设置为一个大数字,以便在您进行tracert测试时,您的内容不会从CDN缓存中删除并从Blob Storage提供。您附近有很多边缘服务器,所以我希望它能表现得更好: 'Windows Azure CDN节点位置' http://msdn.microsoft.com/en-us/library/windowsazure/gg680302.aspx
Maarten Balliauw有一篇关于CDN使用和用例的好文章(这可能有所帮助?):http://acloudyplace.com/2012/04/using-the-windows-azure-content-delivery-network/
不确定是否有所帮助,有趣...

我需要检查我的缓存控制头,因为我相信我不接受代理缓存。尽管如此,跳数仍然令人不安,以及每个跳的响应时间。我会查看你的文章 - 谢谢分享,伙计。 - gimlichael
好的,现在我已经更新了我的CDN,并将cache-control设置为public。 您可以在此处查看我的标题:HTTP / 1.1 200 OK Cache-Control:public,must-revalidate,no-transform,max-age = 604800 Content-Type:application / x-javascript Accept-Ranges:bytes ETag:“2036992d85fc262d9ae5dbdfd7a1eb4a” Server:Microsoft-IIS / 7.0 X-Powered-By:ASP.NET Content-Length:1376 Age:371 日期:2012年4月26日星期四22:15:44 GMT 上次修改时间:2012年4月3日星期二00:09:19 GMT 到期:2012年5月3日星期四22:09:34 GMT 连接:保持活动状态您可以看到,我默认缓存1周,并且在“查看源代码”的情况下发送304。 - gimlichael
在这个更改之后,我将密切关注我的http://www.cuemon.net/网站;关于Azure CDN,文件现在应该保持“代理”状态7天。 - gimlichael

4
好的,在我实现了公共缓存控制头之后,CDN似乎做到了预期的事情;从CDN集群中的x个节点提供内容。
上述内容有一个限制,就是它是经验性的 - 没有具体验证。
不过,这个链接支持我的理论:http://msdn.microsoft.com/en-us/wazplatformtrainingcourse_windowsazurecdn_topic3
引用如下:
“blob的生存时间(TTL)设置控制着CDN边缘服务器在从其源的blob存储中请求新副本之前返回缓存资源的副本的时间。一旦此时间过期,新的请求将强制CDN服务器再次从原始blob检索资源,然后它会再次缓存它。”
这正是我假设的挑战;CDN引用的资源一直在汇聚原始blob。
还要感谢给出这个链接的user728584:http://blogs.msdn.com/b/scicoria/archive/2011/03/11/taking-advantage-of-windows-azure-cdn-and-dynamic-pages-in-asp-net-caching-content-from-hosted-services.aspx
现在的最终链接是:http://blogs.msdn.com/b/windowsazure/archive/2011/03/18/best-practices-for-the-windows-azure-content-delivery-network.aspx 引用如下:
“对于ASP.NET页面,默认行为是将缓存控制设置为private。在这种情况下,Windows Azure CDN不会缓存此内容。要覆盖此行为,请使用Response对象更改默认缓存控制设置。”
因此,到目前为止,我的结论是,您必须密切关注缓存控制(通常出于明显的原因设置为private)。如果跳过Web角色方法,则TTL默认为72小时,为什么您可能永远不会经历我所经历的;因此,它将直接开箱即用。
感谢user728584指导我正确的方向。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接