预测: 多云

开始使用 Windows Azure 的 5 个理由

Joseph Fultz

 

Joseph Fultz
现今,无论您走到哪里,都会听到云—它是 Web 发展中的重要一步,并将改变您开发、部署和管理应用程序的方式。但并非每个人都了解云实际上如何应用于他们的工作和生活当中。这尤其适用于具有大中型基础结构和相对固定的用量的情况 — 与云的运行成本相比,其资本化成本可大大降低。不过,如果您的基础结构较小,或者您具有动态消耗模式,则云 — Windows Azure — 是理所当然的选择。另外,对于维持开发环境就像向美国国会发送议案一样工作繁忙的机构,Windows Azure 可以提供可快速制作原型的卓越平台。

正是怀有这些想法,我才想指出一些有关 Windows Azure 的事情,并希望它们可促使您放下杂志,来构建某个 Windows Azure。

卓越的工具集成

对于 Windows Azure 开发,工具以及与 Visual Studio 的集成已经相当好了,并会很快演变为卓越。您可以在 Windows Azure 开发人员中心(位于 bit.ly/xh1CAE)中找到最新工具集。

正如图 1 所示,您可以选择角色类型和要用于新项目的语言。无论您选择什么,您都可以立即使用工具集成。根据我的经验,您将发现最有帮助的三个功能是开发仿真器、运行时调试和集成的部署。

Creating a New Project
图 1 创建新项目

Windows Azure 开发环境包括两个仿真器,它们允许您在部署之前在开发计算机上轻松运行和调试应用程序(请参见图 2)。Windows Azure 计算仿真器允许您在本地运行服务以进行测试和调试。使用存储仿真器,可以在本地测试存储。

The Windows Azure Compute Emulator and Storage Emulator Running
图 2 Windows Azure 计算仿真器和存储仿真器运行

在合适时,部署到过渡环境或生产环境只需右键单击一下。工具处理在解决方案中打包、移动和部署角色,并且通过 Visual Studio 报告回进度,如图 3 所示。

Deployment Progress for Windows Azure as Reported Back Through Visual Studio
图 3 通过 Visual Studio 报告回的 Windows Azure 部署进度

在早期,Windows Azure 的一个大问题是您开发的一些代码在本地运行良好,但在部署后运行失败或性能低下。幸运的是,IntelliTrace 和分析的引入帮助解决了这些问题。您可以在发布解决方案时启用这些功能,如图 4 所示。

IntelliTrace and Profiling Settings in Windows Azure
图 4 Windows Azure 中的 IntelliTrace 和分析设置

对于调试难以重现的错误,尤其是那些似乎只在生产环境中出现的错误,没有什么可以像 IntelliTrace 一样棒。IntelliTrace 实质上记录您的应用程序的执行,您随后可以重放它。例如,在您部署启用了 IntelliTrace 的角色后,可以查看 IntelliTrace 日志并逐步准确了解在什么时间发生了什么事件(请参见图 5)。

Debugging Windows Azure with IntelliTrace in Visual Studio
图 5 在 Visual Studio 中使用 IntelliTrace 调试 Windows Azure

在您进入线程后,可以浏览任何现有代码来查看在执行过程中发生了哪些变化。当您的网站没有错误(或即将变得没有错误)并且您准备好尝试识别性能问题时,即可禁用 IntelliTrace 并启用分析。正如您在图 4 中看到的,可以选择要执行的分析类型。例如,如果您想知道各个方法的调用时间,可以选择“检测”。此方法收集对焦点分析和分析输入/输出性能问题有用的详细计时数据。它还可用于收集有关代码节的详细计时信息和了解输入和输出操作对应用程序性能的影响。然后,您可以浏览网站来执行基本代码直到您满意为止,那时您将选择“查看分析报告”在服务器资源管理器中查看实例。Visual Studio 将提取信息并生成报告,如图 6 中所示的报告。

A Profiling Report
图 6 分析报告

报告显示随时间的 CPU 使用情况以及“热路径”,单独使用它就可以帮助您关注您的工作。不过,如果您希望深入了解,可通过“热路径”部分中的直接链接查看每个函数的各自计时。主页还显示一个精细图表,指示执行单个工作最多的函数。很明显,可直接从 Visual Studio 获得 IntelliTrace 和分析是一个巨大好处,不仅对于工作效率是这样,对于产品质量也是如此。

请注意,如果您是在 JavaScript、PHP 或 Java 中工作,也不会受到冷落,必须编写您自己对 Windows Azure 平台的访问权。Microsoft 在 bit.ly/uGqPNh 上提供了用于所有这些内容的 SDK 和资源。

性能和规模

如果您一直密切关注过去几年的发展历程,就会知道云的关键前景之一是能够按需扩展。对于计算虚拟机 (VM),您通常只需要支付更多费用即可实现更大角色并获得更多资源。但对于 Microsoft SQL Azure,更多时候需要手动优化。

知道部署到云能够扩展场固然很好,但更紧迫的问题通常是“我需要什么大小的角色?”答案是它取决于流量和您执行的操作。您可以根据过去的经验和角色大小规范进行有根据的推测,如图 7 中所示。

图 7 虚拟机大小规范

虚拟机大小 CPU 内核 内存 Web 和辅助角色中的本地存储资源的磁盘空间 虚拟机角色中的本地存储资源的磁盘空间 分配的带宽 (Mbps)
超小型 Shared 768 MB

19,480 MB

(为系统文件保留 6,144 MB)

20 GB 5
小型 1 1.75 GB

229,400 MB

(为系统文件保留 6,144 MB)

165 GB 100
中型 2 3.5 GB

500,760 MB

(为系统文件保留 6,144 MB)

340 GB 200
大型 4 7 GB

1,023,000 MB

(为系统文件保留 6,144 MB)

850 GB 400
超大型 8 14 GB 2,087,960 MB(为系统文件保留 6,144 MB) 1890 GB 800

这些配置之一可能满足您的需求,尤其与场中的其余角色实例结合使用时。注意所有属性都增加了,包括可用网络带宽,这通常是人们的次要注意事项。还请注意,您实际上不必猜测。您可以打开前面讨论的分析并跨实例收集实际指标来评估性能。根据分析结果,您可以调整虚拟机大小并再次收集分析信息,直至达到最佳效果。对于边界条件,进行最优选择或查找替代解决方案。例如,如果您的网站提供许多内容且不具有太多动态性质,您可以选择较高角色规范之一或移动到 Windows Azure 内容交付网络。

现在关于一些喜忧参半的新闻: SQL Azure 并非总是提供您使用自己的专用实例可能获得的性能。不过,您将获得一致的性能。您可以执行一些操作来获得可能最佳的性能和运行时行为:

  1. 确保 SQL Azure 与您的计算在同一数据中心中。
  2. 优化您的查询和数据结构以适合您的查询。
  3. 不要削减重试逻辑,并确保重试逻辑在您的代码中并经过测试。
  4. 重复步骤 2。

多年来,我看到人们在优化网站时所犯的最大错误之一是仅增加硬件大小而不执行任何其他操作。有时这多少有点作用,但在负载真正增加时,问题将立即重现,并且症状比以前更严重,因为增加马力只会使更多事情更快地发生冲突而没有实际解决或缓解真正的问题。因此,在我建议重复步骤 2 时,我没有开玩笑。您不能仅使用更多硬件来解决问题,并希望它不是死锁问题。SQL Azure Profiler 工具可帮助您完成此工作。我建议您在部署到云之前首先优化本地实例,然后使用 SQL Azure Profiler 帮助识别和执行在云中后所需的任何调整。

最后一点,用于增加 SQL Azure 数据库的规模或大小的一个策略是联盟,通常称为“数据分片”,这是跨多台物理服务器水平分区数据以提供应用程序扩展的技术。这缩短了各个查询时间,但增加了将查询分散到目标实例并在查询完成后将结果收集在一起的复杂度。例如,您将获得并行运行创建、读取、更新、删除 (CRUD) 操作和较小的数据集的好处。您将付出的代价是必须跨分片代理访问权。话虽如此,一些最大的网站使用分片、预取和缓存来管理查询,并且您每天使用这些网站而不会对性能有许多抱怨。

可管理的基础结构

在早期,并非总是可以轻松知道 Windows Azure 部署中正在发生什么,但这些日子已一去不复返了。不仅 Microsoft 提供了不断完善的管理门户,System Center Operations Manager (SCOM) 的管理包也将您的整个基础结构的管理集中到一个位置中。

Windows Azure 将其所有诊断数据写出到存储容器中。您可以直接使用日志并生成报告或执行自定义操作。不过,您还可以使用 SCOM 监视 Windows Azure 应用程序。负责管理企业的基础结构的那些人通常很保守并需要功能全面的工具来进行监视。使用熟悉的解决方案(例如 SCOM)将帮助解决基础结构管理团队可能具有的有关部署云解决方案的保留项。SCOM 允许您监视所有 Windows Azure 部署的运行状况并允许您深入查看托管服务、角色和角色实例。内置到包中的是有关服务和性能的通知,但关键好处是您可以创建自己的与部署和要收集的数据相关的规则和通知。一项额外好处是内置了用于清理日志的规则。与往常一样,如果不在使用过程中及时清除日志,它们可能会增大到无法管理。为帮助解决此问题,管理包附带了预定义规则:

• .NET 跟踪清理

• 性能计数器清理

• 事件日志清理

可以启用这些规则来确保您的空间使用率没有失去控制,但您需要根据执行任务的事务数来平衡它。可以在 bit.ly/o5MW4a 上下载 System Center Monitoring Pack for Windows Azure Applications。

您已经在编写代码

当新技术出现时,您通常必须经过相当数量的培训和体验才能精通: 考虑从 Windows 窗体移到 Windows Presentation Foundation/Silverlight,选择是使用 ASP.NET 还是 SharePoint,或某些更基础的事物,例如在过程开发和面向对象的开发之间作出决定。这正是云最棒的一点,尤其是在提供的工具方面: 如果您已经在编写网站和服务,则可以继续充分利用您的 .NET 技能和投资并直接迁移到云。

这不意味着没有需要了解的一些最佳做法,但并不比您在设计和开发过程中已经做的事情多很多。在您准备好时,平台会提供许多附加功能,您可以学习并利用这些功能使您的解决方案安全可靠,无需自己编写功能或框架,即可获得最佳性能。

这是未来的趋势

立即开始。这是我的建议。转到 azure.com,获取工具并开始。在项目中使用 Windows Azure 来制作原型。在项目中使用它来提供以其他方式难以获取的资源。将它用于任何所需内容,但一定要使用它。云是我们都将依赖的未来,它将像自来水和电一样无处不在。云技术正在不断发展,使计算超过传统范筹并扩展至将在所需位置、所需时间并以所需方式提供计算能力的模型。它是您希望融入其中的事物。

Joseph Fultz 是 Hewlett-Packard Co. 的软件架构师,参与 HP.com 全球 IT 小组的工作。 之前,他是 Microsoft 的软件架构师,协助 Microsoft 顶层企业和 ISV 客户定义体系结构和设计解决方案。

衷心感谢以下技术专家审阅本文:Bruno Terkaly