日期:2014-05-17  浏览次数:20863 次

Windows Azure 上的托管服务CDN

Windows Azure 上的托管服务CDN
2011年03月11日
  公告    :本博客为微软云计算中文博客  的镜像博客。  部分文章因为博客兼容性问题  ,会影响阅读体验  。如遇此情况,请访问  原博客    。
  昨天我告诉正坐在我边上的一个同事,怎样在Windows Azure上发布的网站上对静态内容启用CDN。方法如下:
  1.将静态内容(如图片,CSS文件等)移到博客中存储。
  2.在他的存储账户中启用CDN。
  3.把这些静态文件的URL改为CDN URL。 
  我想这是使用CDN的最普通的步骤了。但是今天早上我在Windows Azure 博客上发现新版本Windows Azure SDK 1.4 和新版本Windows Azure Developer Portal 已经被发布了。此CDN的发行版本的一个新特性是:我们不仅可以为存储账户启用CDN,也可以为托管服务启用CDN。这个新特性给我的启示是上面的步骤将变得简单了许多
  启用托管服务CDN
  我们只需要登录 Windows Azure Developer Portal 就可以启用托管服务CDN了。在"Hosted Services, Storage Accounts & CDN" 项下面我们可以发现左边的一个叫CDN的新菜单,在这里我们可以管理存储账户和托管服务CDN。我们可以看到托管服务和存储账户都被列在订阅中。
  
  启用托管服务CDN是很简单的,只需在顶端选择一个托管服务,然后点击 New Endpoint 按钮即可。
  
  在这个对话框里,我们可以选择我们希望启用CDN的订阅,存储账户或是托管服务。例如上图中,如果我选择了托管服务,"Source URL for the CDN endpoint"就会自动显示。这意味着Windows Azure 平台将使"/cdn"文件夹下所有内容启用CDN。但是此时我们不能改动它的值。
  下面紧挨着URL的3个复选框是:
  1.启用CDN:启用或不启用CDN。
  2.HTTPS:如果我们需要使用HTTPS连接,选中它。
  3.查询字符串:如果我们缓存托管服务内容或使用查询字符串来指定被恢复的内容,选中它。
  只需点击 "Create"按钮就可以让Windows Azure 为我们创建托管服务CDN。系统会提醒你CDN在60分钟内可用。我觉得大约15分钟CDN可以使用,我们也可以在网页中找到CDN URL。  
  
  在托管服务CDN中添加内容
  我们使用MVC2网站框架在Visual Studio上创建一个Windows Azure 项目。当我们创建CDN时,系统提醒CDN端点的源URL将放在"/cdn"文件夹下。所以我们在网站上用Visual Studio创建一个命名为"/cdn"的文件夹来存放静态文件。然后如果我们使用CDN端点,所有的文件将被CDN缓存。
  
  托管服务CDN在查询字符串特性被启用时可以缓存一些"动态的"内容。我们在它上创建了一个叫做CdnController 的控制器和GetNumber action 。这个控制器的URL路径为 /Cdn/GetNumber ,这个路径也可以使用CDN因为URL说明了它存放在"/cdn"文件夹下。 在GetNumber action 里我们只需要把一个被参数指定的数值放到视图模型中,然后URL就会形如 /Cdn/GetNumber?number=2.   1:using System; 2:using System.Collections.Generic; 3:using System.Linq; 4:using System.Web; 5:using System.Web.Mvc; 6: 7:namespace MvcWebRole1.Controllers 8: { 9:publicclass CdnController : Controller 10: { 11:// 12:// GET: /Cdn/ 13: 14:public ActionResult GetNumber(int number) 15: { 16:return View(number); 17: } 18: 19: } 20: }
  我们添加视图来显示数值,非常简单,方法如下:  1:" %> 2: 3: 4: GetNumber 5: 6: 7: 8: 9:The number is:  10: 11:
  因为这个action是在CdnController 下,所以URL也会在"/cdn"文件夹下,这意味着它可以使用CDN。因为我们选中了 "Query String" ,动态页面内容根据它的query string来进行缓存,所以如果我们使用了CDN URL ,http://az25311.vo.msecnd.net/GetNumber?number=2,   CDN将会首先检查是否有内容使用"GetNumber?number=2"进行缓存。如果有,CDN会直接返回内容,否则,它会连接托管服务,http://aurora-sys.cloudapp.net/Cdn/GetNumber?numbe r=2, 然后返回结果给浏览器并且在CDN中缓存。
  But to be notice that the query string are treated as string when used by the key of CDN element. This means the URLs below would be cached in 2 elements in CDN:
  但是需要注意的是当查询字符串被CDN元素键使用时应作为字符串看待。这意味着下面的URL将在CDN的两个元素里缓存:  在Azure上发布项目以后,我们在网站上使用CDN。我们创建的CDN端点是az25311.vo.msecnd.net 所以在"/cdn"文件夹下可以被请求到。让我们在 sample.htm页面和 c_great_wall.jpg静态文件中试一下。  
  
  
  我们在CDN端点上使用查询字符串也可以请求到动态页面GetNumber 
  
  因为来自CDN的内容不需要MVC服务器的处理,所以如果我们刷新这个页面它就会迅速显示出来。
  我们这个页面风格丢失了,这是因为CSS文件不包含在"/cdn"文件夹里所以页面不能在CDN URL 中检索到CSS。
  总结
  在这个帖子中,我介绍了Windows Azure SDK 1.4 发行版本和新Developer Portal 中的 Windows Azure CDN 新特性。使用托管服务CDN,我们可以只在"/cdn"文件夹中存放静态资源,所以CDN可以自动缓存他们,不需要让它们在blob中存储。使用查询字符串特性也可以支持动态内容缓存。所有我们可以使用 UserController 和 CDN可以缓存网页的一部分内容。例如:我们可以在母板面中的用户控件上缓存日志,使得日志可以更迅速的显示出来。
  发行版本的其他新特性请点击这里。更多的Windows Azure CDN详细信息请点击这里。
  希望以上对你有所帮助,
  Shaun
  本文翻译自:http://geekswithblogs.net/shaunxu/archive/2011/03/ 10/cdn-on-hosted-service-in-windows-azure.aspx