深入了解 Windows Azure

Windows Azure 网站: 以服务形式简单快速地托管

Bruno Terkaly
Ricardo Villalobos

下载代码示例

Bruno Terkaly and Ricardo VillalobosWindows Azure 网站 (WAWS) 是 Microsoft 云平台的一个引人注目的功能。WAWS 是在 Windows Azure 平台即服务 (PaaS) 框架基础上构建的服务,该框架简化了与托管云应用程序相关的部署、管理和可扩展性任务。如果这使您认为 WAWS 只是另一个更重要的托管解决方案,那就错了。它们的区别在于 WAWS 提供的可扩展性和高可用性的级别、由世界各地的多个数据中心支持以及从 PaaS 组件继承的故障转移机制。此外,Windows Azure 平台提供很多超出 WAWS 范围的功能,允许开发人员随着需求增长增强其应用程序,其中包括对大量数据、标识、移动服务等的支持。

数据中心部署模型

图 1 中所示的分类显示了与在公共数据中心中部署 Web 应用程序有关的各种模型。我们可以通过委托给平台或供应商的层数区分以下术语:基础结构即服务 (IaaS)、PaaS 和软件即服务 (SaaS)。

Taxonomy for Cloud Deployment Models
图 1 云部署模型的分类

您委托给供应商的层越多,在线部署解决方案就越容易,尽管针对委托的层的自定义级别通常会下降。Windows Azure 提供了 IaaS 和 PaaS 部署模型,这些模型与其他服务结合,使公司可以创建可扩展性强的复杂云体系结构。那么,我们应将 WAWS 放置在何处呢?

为什么您会喜爱 Windows Azure 网站

如前文所述,WAWS 是建立在 Windows Azure PaaS 框架基础上,这意味着您只需要负责维护部署堆栈的应用程序层和数据层。与 Windows Azure 提供的传统 PaaS 模型的最大区别在于它大大简化了一些部署和配置任务。这可能要归功于基础 WAWS 的配置过程,基础 WAWS 基于无状态的辅助角色、存储二进制大对象 (BLOB) 和关系数据库的组合。

图 2 显示支持 WAWS 的体系结构。这是为托管 Web 应用程序提供多租户环境的可靠方法。其工作原理非常简单:

  1. 客户端发出托管 http://foo.azurewebsites 的请求。net.
  2. 该请求穿过 Windows Azure 网络负载平衡器到达相应的部署。
  3. 应用程序请求路由 (ARR) 模块从运行时数据库获取有关 foo.com 的信息,确定哪个 Web 服务器应托管或当前正在托管该网站,然后将请求转发到相应的服务器。
  4. 如果正在读取或写入数据,则该请求由 Web 服务器处理并在存储控制器的帮助下到达 SQL Server 的特定实例。
  5. 处理该请求后,将响应信息发回客户端。

Windows Azure Web Sites Under the Hood
图 2 深入了解 Windows Azure 网站

在每个 Web 服务器内,承载多个 W3WP.exe 进程或站点,它们由监视资源使用情况、错误和日志的特定进程监视。而且,动态 Web 激活服务负责应用程序文件的站点激活和停用、配额实施和部署。两个额外组件提供图中功能: 部署服务器承载 FTP 和 Web 部署引擎,API 前端则提供用于自动执行操作的接口。

此体系结构可以实现近似即时部署的体验,在需要时可以向外扩展。

考虑采用 WAWS 有很多原因。其中一个原因是此服务提供对客户端标记和脚本的强力支持,其中包括内置连接到 SQL Server 和 MySQL 数据库。这意味着您不必担心有关实现后端 Web 服务和服务器逻辑的问题。考虑采用 WAWS 的另一个原因是它可以灵活扩展,以支持最忙和最空闲时段内的 Web 用户。

因为您仅为所用的资源付费,因此可以在成本不高的情况下提供较快的响应用户体验。WAWS 服务还支持连续部署方法,因此您可以使用客户端上的 Git、GitHub、CodePlex、Bitbucket 或 Team Foundation Server (TFS) 直接从源代码存储库部署。可以即时上载新代码或不断与在线存储库集成。由于其配置模型,WAWS 服务提供对 WordPress、Joomla!、Drupal、DotNetNuke、Umbraco 等的内置支持。这些模板在 WAWS 库中分类,包括博客、内容管理、电子商务、论坛和 wiki。

使之变为现实

与简化问题的任何技术一样,它也要付出一定代价。例如,WAWS 不支持用于测试的临时环境,也不支持通过网络隔离将云应用程序与内部网络(包括 Windows Azure Connect 或 Windows Azure 虚拟网络)桥接。但是,用户可以选择使用“服务总线中继”服务跨越与公司资源的鸿沟。此外,您不能在部署期间对计算实例运行远程桌面或执行启动任务。即使这样,WAWS 仍不失为开发和部署不需要高层次自定义的 Web 应用程序的一个理想解决方案。

动手操作

现在让我们演练一下简单教程中的步骤。当我们这样做时,您将会发现自己无需再学习有关云的任何新知识了。您可以集中精力创建自己的 Web 应用程序和数据,就像往常一样。该服务提取了迁移到云的详细信息,使您可以顺利进行部署。您甚至可以编写在 1996 年生成的相同典型 ASP 代码并在 WAWS 中运行它。

我们将使用 SQL Server 作为后端创建简单实用的 ASP.NET MVC 4 应用程序,通过它来认识 WAWS 服务的基本元素。这个简单的应用程序将支持创建、读取、更新和删除 (CRUD) 操作,几乎不需要编写任何代码。配置 WAWS 并生成 ASP.NET MVC 4 应用程序后,我们将使用 Visual Studio 2012 中的“Web 部署”来部署它。唯一的开支是 SQL Database - 在 WAWS 内运行 ASP.NET MVC 4 应用程序是免费的。您可以无限期免费运行多达 10 个站点。

启动 Visual Studio 并创建 MVC 项目

要开始操作,请以管理员身份打开 Visual Studio 2012 并单击“文件”|“新建”|“项目”。从“已安装的模板”选择“Web”,然后选择“ASP.NET MVC 4 Web 应用程序”。将项目命名为 MVCAzure.Website,然后单击“确定”(参见图 3)。接着您需要选择项目模板。在此处选择“Internet 应用程序”。视图引擎将是 Razor。

Creating a New ASP.NET MVC 4 Web Application Project
图 3 创建新的 ASP.NET MVC 4 Web 应用程序项目

代码优先

“代码优先”方法意味着您在 Visual Studio 中创建的类将定义 SQL Server 中的基础表。在 ASP.NET MVC 4 应用程序中,这意味着我们将在 Visual Studio 解决方案资源管理器中在 Models 文件夹下添加一些类模块,如图 4 中所示。在类模块中定义的属性将成为 SQL Database 表结构。此方法的效率很高,因为您不必担心将您的 C#/Visual Basic 对象映射为关系数据结构的问题。我们将利用实体框架来简化这个对象-关系映射。实体框架是一个对象-关系映射器,它使得与关系数据库交互变得更容易。有了它,您可以对对象执行 CRUD 操作而无需编写复杂的 SQL 语句。

Adding a Class to the Models Folder
图 4 将类添加到 Models 文件夹

首先请从解决方案资源管理器中选择 Models 文件夹。从“项目”菜单中选择“添加类”。将该类命名为 Person。将以下属性粘贴到 Person 类(这些属性将成为 SQL Server 中 Person 表的列):

public class Person
{
  public int PersonID { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

ASP.NET MVC 4 应用程序需要一个控制器类来作为视图和模型之间的桥梁。您可以将视图视为用户界面,将模型视为数据。添加控制器后,Visual Studio 自动生成所需的视图类。

不过在添加控制器类前,您需要生成解决方案以便该项目添加在后续步骤中所需的相应类型信息。从“生成”菜单选择“生成解决方案”。在解决方案资源管理器中,您可以右键单击 Controllers 文件夹,然后选择“添加”|“控制器”。将显示图 5 中所示的“添加控制器”对话框,您将需要使用以下值设置基架选项:

  1. 在“模板”下拉列表中,选择“具有读/写操作和视图的 MVC 控制器,使用实体框架”选项。
  2. 在“模型类”下拉列表中,选择 Person 类。
  3. 在“数据上下文类”列表中,选择“<新建数据上下文...>”。在显示的对话框中,将名称设置为 Person­Context,然后单击“确定”。
  4. 在“视图”下拉列表中,确保选择了 Razor。
  5. 单击“添加”以完成此过程。

Adding an MVC Controller Class
图 5 添加 MVC 控制器类

将控制器添加到项目将生成所有所需的 Web 基架,因此可以针对 SQL Server 数据库执行 CRUD 操作,这会导致添加几个文件(如图 6 中所示)。如果您打开 PersonController 类,将可以查看支持“创建”、“编辑”、“删除”和“列出”操作的所有操作方法。

图 6 添加的文件

Controller 文件夹 PersonController.cs
Models 文件夹

Person.cs

PersonContext.cs

Views/Person 文件夹

Create.cshtml

Delete.cshtml

Details.cshtml

Edit.cshtml

Index.cshtml

下一步 - 部署

如前文所述,您可以使用连续传递框架(如 Git 或 TFS)或简单工具(如 FTP 或“Web 部署”)来部署网站。在本文中,我们将使用 Visual Studio 中的“Web 部署”,但是您可以在 Windows Azure 培训包 (bit.ly/Wb0EKZ) 中了解有关其他部署方法的信息。

第一步是登录到 Windows Azure 管理门户。为此,请在 bit.ly/azuretestdrive 上注册以获得 90 天的试用期。设置您的帐户后,登录到此 URL: manage.windowsazure.com。然后单击浏览器窗口左侧的“网站”链接。接着,单击“新建”|“计算”|“网站”|“快速创建”,键入所需的 URL,如图 7 中所示。我们使用了 msdnmagazine,这意味着我们的网站位于 http://msdnmagazine.azurewebsites.net。您还应选择一个区域。

Quick Provisioning of a Windows Azure Web Site Deployment
图 7 Windows Azure 网站部署的快速配置

此时,您的网站几乎可以部署内容了。完成配置过程所需的时间很短。当显示“正在运行”状态时,您可以单击该网站名称并开始管理它。门户上还有一个仪表板,它显示 CPU 时间、请求、输出数据量、输入数据量和 HTTP 服务器错误等信息。

部署应用程序的关键步骤是获取发布配置文件,该文件包含 Visual Studio 将用于执行部署的设置。根据您所用的浏览器,您也许可以下载发布配置文件。您应在本地保存一个副本,供以后在 Visual Studio 中使用它。

配置数据库服务器

在使 ASP.NET MVC 4 应用程序投入运行前,您需要如图 8 中所示配置数据库。您应该记得,此项目使用的是“实体框架代码优先”模式,这意味着您不必担心创建和初始化关系数据结构通常所需的所有数据管理命令问题。实体框架将处理此类问题。

Adding a Server to Host SQL Database
图 8 将服务器添加到主机 SQL Database

单击“添加”时,系统将要求您提供登录名和密码,以及希望您的 Windows Azure SQL Database 部署所在的区域。强烈建议您选择在其中运行 WAWS 的同一数据中心,以最大限度减小延迟时间和避免带宽费用。在我们的示例中,登录名为 DBAdministrator。如果您以后要远程进行操作或需要生成连接字符串,这可能很重要。还要注意为您配置了服务器名称(示例中为 ccek4yihqf)。您可以单击该服务器名称以从门户获取更多详细信息(参见图 9)。

图 9 服务器详细信息

服务器名称 ccek4yihqf
服务器状态 已启动
管理员登录名 DBAdministrator
URL https://ccek4yihqf.database.windows.net

此处的一个重要目标是保护您的数据库服务器信息,只允许特定的 IP 地址建立入站连接。单击屏幕顶部的“配置”。您将看到当前的 IP 地址,您可以使用它创建一个规则并直接从该 IP 地址连接到服务器。

从 Visual Studio 执行 Web 部署

我们现在可以部署此项目并同时在刚刚配置的服务器上创建数据库,以完成此项目。返回 Visual Studio 并选择“视图”|“解决方案资源管理器”。右键单击 MVC­Azure.WebSite 并选择“发布”。将显示“发布 Web”对话框。此过程通过向导来完成,其中第一步是将发布配置文件加载到 Visual Studio,这样您可以大大简化部署过程。您将执行几个步骤,用于为 ASP.NET MVC 4 应用程序指定发布配置文件的详细信息,提供有关您要如何在 Microsoft 数据中心内部署应用程序的信息,其中包括 Windows Azure SQL Database 服务器的目标 URL 和位置。

您可以通过以下方式指定 ASP.NET MVC 4 应用程序将使用的 Windows Azure SQL Database 服务器:单击对话框左侧的“设置”,然后单击 PersonContext 旁边的省略号,如图 10 中所示。

Configuring the Database Connection
图 10 配置数据库连接

现在您将需要使用在创建数据库服务器时从门户收到的信息。在我们的示例中,服务器为 tcp:siqxqgihiy.database.windows。net,如图 11 中所示。请注意,我们在服务器名称前面追加了 tcp。您还需要输入管理员名称(我们在前面的步骤中输入了 DBAdministrator)和密码。

Connecting to the Server and Creating the Database
图 11 连接到服务器并创建数据库

单击“确定”后,会在您输入的服务器上实际创建 SQL Database。系统将要求您确认此步骤。创建数据库后,您可以从“发布 Web 应用程序”对话框选择“发布”。要确切查看部署期间发生了什么事件,可以在 Visual Studio 中选择“视图”|“输出”窗口。

现在整个应用程序就完成了,您可以在 msdnmagazine.azurewebsites.net/Person 上查看我们的版本。请记住我们几乎不需要编写任何代码 - 只需要几分钟就可以完成必要的修改工作。

部署后干些什么?

部署应用程序后,可以轻松执行监视、扩展或升级网站等任务。首选方法是使用 Windows Azure 门户,该门户提供可从多个设备访问的易于使用的仪表板。从 Windows Azure SDK 版本 1.8 开始,使用 Windows PowerShell cmdlet 或直接进行具象状态传输 (REST) API 调用也可以自动执行一些任务,其中包括管理连接字符串和应用程序设置、更改实例数或下载最新日志。

总结

WAWS 为您提供了几乎可以即时部署 Web 应用程序的一个方法 - 需要很少或无需云经验。随着需求的增加,您可以加入 Windows Azure 云技术的其他方面,如缓存、服务总线、存储和其他增值服务。由 Windows Azure PaaS 组件提供支持,没有比这更简单的方法来在云中托管可扩展、高度可用的 Web 应用程序了。通过将这些功能与预置的框架(如 WordPress、Drupal、DotNetNuke 和 Umbraco)结合使用,开发人员可以专心致力于构建丰富的 Web 应用程序和数据存储库,而将基础结构任务委托给 Windows Azure 平台来执行。

Bruno Terkaly是 Microsoft 的开发推广人员。 他的知识深度来源于多年来相关领域以及使用大量平台、语言、框架、SDK、库和 API 编写代码的经验。 他不辞辛苦,就有关构建基于云的应用程序(特别是使用 Windows Azure 平台)编写代码、发布博客并给予现场演示。

Ricardo Villalobos 是一名资深的软件设计师,具有 15 年为供应链管理行业设计和创建应用程序的经验。 他持有几个不同的技术证书,并获得了达拉斯大学商务管理专业的硕士学位。他是 Microsoft 的 Windows Azure CSV 孵化团队的云架构师。

衷心感谢以下技术专家对本文的审阅: Nir Mashkowski