云计算设计模式(二十二)——静态内容托管模式

部署静态内容到一个基于云的存储服务,可以直接向客户提供这些。这个模式可以减少潜在的昂贵的计算实例的需求。

景和问题

Web应用程序通常包括静态内容的一些元素。此静态内容可以包括HTML页面和诸如图像和可用到客户端的文件的其他资源,无论是作为一个HTML页的一部分(如嵌入式图像,样式表和客户端JavaScript文件)或作为单独的下载(如PDF文档)。

尽管Web服务器以及调整通过有效的动态执行页代码和输出缓存优化的要求,他们仍然必须处理请求下载静态内容。这种吸收,可以经常得到更好的利用处理周期。

解决方案

在大多数云托管环境中,它可以最小化用于计算实例的要求(例如,使用较小的实例或更少的情况下),通过定位部分的应用程序的资源和静态网页中的存储服务。费用为云托管的存储通常比计算实例少得多。

何时主机在一个存储服务的应用的某些部分,主要考虑的是与应用程序的部署以及确保其不旨在提供给匿名用户的资源。

问题和注意事项

在决定如何实现这个模式时,请考虑以下几点:
•托管存储服务必须公开,用户可以访问下载静态资源的HTTP端点。一些存储服务还支持HTTPS,这意味着它能够承载需要使用SSL在存储业务资源。
•为了获得最高的性能和可用性,可以考虑使用内容分发网络(如果有的话)来缓存在世界各地的多个数据中心的存储容器中的内容。但是,这将产生额外费用的使用内容交付网络。
•存储账户往往GEO-复制默认情况下,提供弹性对可能影响数据中心的事件。这意味着它们的IP地址可能会改变,但该URL将保持不变。
•当一些内容位于一个存储账户等内容的托管计算实例变得更具挑战性来部署应用程序并对其进行更新。这可能是必要的,以便当所述静态内容包括脚本文件或用户界面组件来管理它更容易,尤其是分别执行的部署,以及版本的应用程序和内容。然而,如果仅仅静态资源要更新他们可以简单地被上传到存储帐户,而无需重新部署应用程序包。
•存储服务可能不支持使用自定义域名。在这种情况下,有必要在链接指定的资源的完整URL,因为它们将在从含有链接动态地生成的内容不同的域。
•存储容器必须为公共读取权限进行配置,但它是至关重要的,以确保它们没有被配置为市民写访问权限,以防止用户能够上传内容。请考虑使用代客钥匙或令牌控制对资源的访问不应该用匿名,看到代客主要模式的更多信息。

何时使用这个模式

这种模式非常适合于:
•最小化的网站,并包含一些静态资源应用的托管费用。
•最小化的网站只包含静态内容和资源的托管费用。根据不同的托管服务提供商的存储系统的功能,有可能承载全静态网页的全部内容存储帐户内。
•暴露的静态资源和其他宿主环境或本地服务器上运行的应用程序的内容。
•通过使用缓存的存储账户中的内容在世界各地的多个数据中心的内容分发网络定位在多个地理区域中的内容。
•监测成本和带宽的使用。使用一段静态内容的部分或全部单独的存储帐户允许的成本更容易分辨从承载和运行成本。

这种模式可能不适合于下列情况:
•应用程序需要将它传递给客户端之前对静态内容进行一些处理。例如,它可能是必要的时间戳添加到文档中。
•静态内容的数量是非常小的。检索从单独的存储该内容的开销可能会超过它的计算资源中分离出来的成本效益。

注意:

它有时是可以存储一个完整的网站只包含静态内容,如HTML页面,图片,样式表,客户端JavaScript文件,下载的文件,如在云中托管的存储PDF文件。欲了解更多信息,请参阅在Infosys的博客部署静态网站在微软Azure的有效途径。

例子

位于Azure的Blob存储静态内容,可直接通过Web浏览器进行访问。 Azure提供一个基于HTTP的接口上的存储,可以公开暴露给客户。例如,在一个天青Blob存储容器内容使用形式的URL被公开:

HTTP:// [存储帐户名称].blob.core.windows.net/[容器名称]/[文件名]

何时上载该应用程序的内容,必须创建一个或多个斑点的容器来保存文件和文档。请注意,对于一个新的容器的默认权限是私有的,你必须改变这种公共允许客户端访问的内容。如果有必要,以防止匿名访问的内容,您可以实现代客主要模式,因此用户必须按顺序下载资源出示有效的令牌。

注意:

在Azure网站上的页面Blob服务的概念包含了Blob存储信息,并且您可以访问它,并用它的方式。

在每个页面中的链接将指定的资源的URL,客户端将直接从存储服务访问该资源。图1示出了这种方法。

图1 - 从存储服务交付的应用程序的静态部分,直接

在传送到客户端的页面的链接必须指定的blob容器和资源的完整URL。例如,包含在一个公共容器的链接的图像的页面可能包含以下内容。

[html] view plaincopy

  1. <img src="http://mystorageaccount.blob.core.windows.net/myresources/image1.png"
  2. alt="My image" />

注意:

如果该资源是通过使用代客密钥进行保护,如天青共享访问签名(SAS),该签名必须被包含在链接的URL。

适用于本指南中的示例包含一个名为StaticContentHosting,演示了使用外部存储静态资源的解决方案。该StaticContentHosting.Cloud项目包含指定保存静态内容的存储帐户和容器的配置文件。

[html] view plaincopy

  1. <Setting name="StaticContent.StorageConnectionString"
  2. value="UseDevelopmentStorage=true" />
  3. <Setting name="StaticContent.Container" value="static-content" />

在StaticContentHosting.Web项目的文件Settings.cs Settings(设置)类包含的方法来提取这些值,并建立一个字符串值,包含云存储帐户的容器的URL。

[csharp] view plaincopy

  1. public class Settings
  2. {
  3. public static string StaticContentStorageConnectionString {
  4. get
  5. {
  6. return RoleEnvironment.GetConfigurationSettingValue(
  7. "StaticContent.StorageConnectionString");
  8. }
  9. }
  10. public static string StaticContentContainer
  11. {
  12. get
  13. {
  14. return RoleEnvironment.GetConfigurationSettingValue("StaticContent.Container");
  15. }
  16. }
  17. public static string StaticContentBaseUrl
  18. {
  19. get
  20. {
  21. var account = CloudStorageAccount.Parse(StaticContentStorageConnectionString);
  22. return string.Format("{0}/{1}", account.BlobEndpoint.ToString().TrimEnd(‘/‘),
  23. StaticContentContainer.TrimStart(‘/‘));
  24. }
  25. }
  26. }

在文件StaticContentUrlHtmlHelper.cs的StaticContentUrlHtmlHelper类公开命名StaticContentUrl,如果传递给它的URL与ASP.NET根路径字符(?)开始生成包含路径的云存储帐户的URL的方法。

[csharp] view plaincopy

  1. public static class StaticContentUrlHtmlHelper
  2. {
  3. public static string StaticContentUrl(this HtmlHelper helper, string contentPath)
  4. {
  5. if (contentPath.StartsWith("~"))
  6. {
  7. contentPath = contentPath.Substring(1);
  8. }
  9. contentPath = string.Format("{0}/{1}", Settings.StaticContentBaseUrl.TrimEnd(‘/‘),
  10. contentPath.TrimStart(‘/‘));
  11. var url = new UrlHelper(helper.ViewContext.RequestContext);
  12. return url.Content(contentPath);
  13. }
  14. }

在浏览文件Index.cshtml\ Home文件夹包含使用StaticContentUrl方法创建的URL,它的src属性的图像元素。

[html] view plaincopy

  1. <img src="@Html.StaticContentUrl("~/Images/orderedList1.png")" alt="Test Image" />

本文翻译自MSDN:http://msdn.microsoft.com/en-us/library/dn589776.aspx

时间: 2024-10-17 04:57:07

云计算设计模式(二十二)——静态内容托管模式的相关文章

云计算设计模式(十九)——运行重构模式

云计算设计模式(十九)——运行重构模式 设计应用程序,使得它可以在不需要重新部署或者重新启动应用程序重新配置.这有助于保持可用性并减少停机时间. 背景和问题 一个主要目的为重要的应用,如商业和企业网站是尽量减少停机时间以及由此引发的中断给客户和用户.但是,有时有必要重新配置应用程序改变特定行为或设置,而在部署和使用.因此,它是用于该应用程序被设计成这样一种方式,以允许在运行时要应用这些配置的变化,并为应用程序,以检测所述变化并且尽快地应用它们的部件的优点. 该种要应用可能被调整记录,以协助与应用

云计算设计模式(十九)——执行重构模式

云计算设计模式(十九)--执行重构模式 设计应用程序,使得它能够在不须要又一次部署或者又一次启动应用程序又一次配置.这有助于保持可用性并降低停机时间. 背景和问题 一个主要目的为重要的应用.如商业和企业站点是尽量降低停机时间以及由此引发的中断给客户和用户. 可是.有时有必要又一次配置应用程序改变特定行为或设置,而在部署和使用.因此,它是用于该应用程序被设计成这样一种方式,以同意在执行时要应用这些配置的变化,并为应用程序.以检測所述变化而且尽快地应用它们的部件的长处. 该种要应用可能被调整记录,以

云计算设计模式(十二)——索引表模式

创建索引过的被查询条件经常被引用的数据存储等领域.这种模式可以通过允许应用程序更快速地定位数据来从数据存储中检索提高查询性能. 背景和问题 许多数据存储通过使用主键组织为实体的集合的数据.应用程序可以使用此键来查找和检索数据.图1显示了一个数据存储区保持顾客的信息的例子.主键是客户ID. 图1  - 按主键组织的客户信息(客户ID) 而主键是该取基于该关键字的值的数据的查询宝贵的,应用程序可能不能够使用主键是否需要基于其它字段来检索数据.在顾客例如,应用程序不能使用该客户ID主键来检索客户,如果

云计算设计模式(十六)——优先级队列模式

优先发送到服务,以便具有较高优先级的请求被接收和高于一个较低优先级的更快速地处理请求.这种模式是在应用程序是有用的,它提供不同的服务级别保证或者针对独立客户. 背景和问题 应用程序可以委托给其他服务的具体任务;例如,为了执行后台处理或与其他应用程序或服务的整合.在云中,消息队列通常用于将任务委派给后台处理.在许多情况下,请求由服务接收的顺序是不重要的.然而,在某些情况下,可能需要优先考虑的具体要求.这些要求必须早于较低优先级的其他可能先前已发送由应用程序进行处理. 解决方案 队列通常是先入先出(

云计算设计模式(二十四)——仆人键模式

云计算设计模式(二十四)——仆人键模式 使用一个令牌或密钥,向客户提供受限制的直接访问特定的资源或服务,以便由应用程序代码卸载数据传输操作.这个模式是在使用云托管的存储系统或队列的应用中特别有用,并且可以最大限度地降低成本,最大限度地提高可扩展性和性能. 背景和问题 客户端程序和网络浏览器经常需要读取和写入文件或数据流,并从一个应用程序的存储空间.通常,应用程序将处理的运动数据,或者通过从存储读取它,并将其传输到客户端,或通过从客户机读取该载流并将其存储在数据存储中.然而,这种方法吸收了宝贵的资

云计算设计模式(二十)——调度程序代理管理者模式

云计算设计模式(二十)——调度程序代理管理者模式 协调一系列在分布式服务集和其他远程资源的的行为,试图透明地处理故障,如果这些操作失败,或撤销,如果系统不能从故障中恢复执行工作的影响.这种模式可以分布式系统中增加弹性和灵活性,使之恢复和重试失败是由于短暂的异常,持久的故障和处理故障等操作. 背景和问题 应用程序执行其包括多个步骤,其中的一些可以调用远程服务或访问远程资源的任务.各个步骤可以是相互独立的,但它们是由实现该任务的应用程序逻辑编排. 只要有可能,应用程序应该确保任务运行完成和解决远程访

设计模式之十二:Proxy(代理)—对象结构型模式

2014-05-29 星期四 21:08:37  Proxy,继续GOF.此模式未按GOF编写. c++中使用StringBuilder 1.Intent Provide a surrogate or placeholder for another object to control access to it. 为其他对象提供一种代理以控制对这个对象的访问. 2.Also Known As 3.Motivation 4.Applicability 在以下情况使用适配模式: ● 创建开销大的对象时

微软云计算介绍与实践(实践之二十二)

创建私有云Runbook 小张目前是手动管理大量(由晓红申请)的私有云.而自动化是私有云的重要特点,所以小张想用自动化功能去完成很多简单机械的任务.小张决定设法实现这一目标,利用System Center 2012 Orchestrator.于是我们看到了下面的内容: 1.登录到Orchestrator服务器Orchestrator 2.打开Runbook设计 3.在左边的连接下,在运行手册单击鼠标右键并选择New...>文件夹 4.给新文件夹的名称,例如CloudResources 5.在新创

设计模式(十二): Flyweight享元模式 -- 结构型模式

说明: 相对于其它模式,Flyweight模式在PHP实现似乎没有太大的意义,因为PHP的生命周期就在一个请求,请求执行完了,php占用的资源都被释放.我们只是为了学习而简单做了介绍. 1. 概述 面向对象技术可以很好地解决系统一些灵活性或可扩展性或抽象性的问题,但在很多情况下需要在系统中增加类和对象的个数.当对象数量太多时,将导致运行代价过高,带来性能下降等问题.比如:例子1:图形应用中的图元等对象.字处理应用中的字符对象等. 2.解决方案: 享元模式(Flyweight):对象结构型模式运用