深入了解 Windows Azure

在 Windows Azure 中测量和自动缩放多租户应用程序

Bruno Terkaly
Ricardo Villalobos

在以前的专栏 (msdn.microsoft.com/magazine/dn201743),我们介绍了有关创建多租户的应用程序的概念涵盖的四个支柱建立这种类型的系统时应考虑的两个:标识与安全和数据的分离和隔离。这个月,我们集中都深感与否的其他两个重要的领域:计量及自动缩放。计量允许公司收集信息的不同组件之间所有住户 ; 共享 自动缩放保障最终用户的体验不受影响的高流量,期间服务器合同工资源需求较低时。

收集关于资源使用情况的信息时常见故障排除的应用程序,尤其是在开发和测试流程。通过这样做,可以设置阈值和硬件要求,以保证最佳性能的解决方案,并可以建议的最低硬件要求。在 Windows 中,通过使用性能计数器有助于确定系统瓶颈和错误条件完成此任务。

当运行多租户的解决方案,云计算,并不只在发展阶段,计量就显得尤为重要。支持多个用户共享共同资源构成了具体挑战,例如,如何强制配额的住户,找出任何可能会消耗过多的资源,或者决定是否定价层需要重新定义的用户。请记住,计量多租户的解决方案不只只是确定或验证使用条例草案从云提供商 — — 在此情况下 Windows Azure — — 但也谈优化您的部署中的资源,保证住户期望的服务水平,通常表示在服务级别协议 (SLA)。

在本文中,我们会集中计量和自动缩放的计算部分多租户的解决方案,该解决方案的类型,最受用户访问应用程序的数量的变化。现在,Windows Azure 支持多云部署模型 (云服务、 虚拟机和 Web 站点),它是重要的是要了解不同的日志记录和诊断选项,每个提供的以及他们如何才能体自动缩放基于此信息。如果你需要更好地了解基本的差异、 好处和这些部署模型的局限性,你会发现一个很好的指南,在 bit.ly/Z7YwX0

Windows Azure 云计算服务的数据收集

云服务 (基于平台作为服务的概念),收集数据,通过 Windows Azure 诊断 (一团) 的基础设施,这建立在追踪 Windows 事件 (ETW) 框架。因为云服务基于无状态的虚拟机 (Vm),一团允许您保存本地的数据,并基于日程安排,将它转移到 Windows Azure 存储使用 blob 和表中的中央存储库。一旦已从角色中的多个实例收集诊断数据,它可以分析并用于多种用途。图 1 演示这一过程是如何工作的。


图 1 Windows Azure 云服务诊断

要启用诊断为云服务,应导入 (ServiceDefinition.csdef 文件),通过角色部署相应的模块,然后启用通过一团配置文件 (diagnostics.wadcfg)。另一种方法是以编程方式配置的作用,在 OnStart 方法内的诊断,但使用的配置文件是首选的因为它第一次加载和启动任务可以捕获和记录有关错误。此外,对配置的更改不需要重新生成的代码。图 2 显示配置文件的最基本服务的定义和诊断程序的版本。

图 2 基本服务的定义和诊断为云服务的配置文件

 

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyHostedService" xmlns=
  "https://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"
  schemaVersion="2012-10.1.8">
  <WebRole name="WebRole1">
    <!--<Sites> ... </Sites> -->
    <!-- <Endpoints> ... </Endpoints> -->
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
  </WebRole>
</ServiceDefinition>
<?xml version="1.0" encoding="utf-8" ?>
<DiagnosticMonitorConfiguration xmlns=
  "https://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration"
  configurationChangePollInterval="PT1M"
  overallQuotaInMB="4096">
  <Directories bufferQuotaInMB="0" scheduledTransferPeriod="PT30M">
    <IISLogs container="wad-iis" directoryQuotaInMB="0" />
  </Directories>
</DiagnosticMonitorConfiguration>

ConfigurationChangePollInterval 属性定义实例检查频率配置更改,而 scheduledTransferPeriod 指定的本地文件,转到 Windows Azure 存储的时间间隔 (在示例中所示图 2,到"一团-iis"blob 容器)。 考虑一分钟 (PT1M) 是默认的最小值为预定转让的文件参数,但它可能是对于大多数方案矫枉过正。 OverallQuotaInMB 属性定义文件系统存储日志缓冲区分配的总金额。 每个数据源的 bufferQuotaInMB 属性也可以保留默认值为零 — — 这意味着它能小于 overallQuotaInMB 属性 — — 或者它可以显式设置。 OverallQuotaInMB 必须小于 bufferQuotainMB 的所有属性的总和。

尽管不同的数据源可以用于收集诊断信息的云服务,使用它们来确定哪些特定租户消耗的计算资源的大部分并不容易。 由 IIS 万维网联合会 (W3C) 日志,假设交通从不同的用户提供可以用于此目的的最接近公制和租户跟踪通过 URL 参数或特定的虚拟目录。 为了激活它,您可以添加 IISLogs XML 节点诊断程序的配置文件 (也包括在图 2),但警告这些 IIS 日志可以快速获取巨大。 请记住诊断信息都存储在 Windows Azure 存储帐户,并可以更改配置上部署和运行服务。

若要了解更多关于其他类型的数据源,通过配置文件 — — 包括 Windows 事件日志和性能计数器,除其他外的 — — 您可以查看在 Windows Azure 文档 bit.ly/GTXAvo。 另外,2.0 版的 Windows Azure sdk,配置诊断程序在 Visual Studio 中的过程从开始已大大提高。 诊断部分现在提供了一个自定义计划,可以进行修改以包括一个或多个数据源,可以记录并转移到指定的 Windows Azure 存储帐户 (图 3)。

New Diagnostics Configuration Options in Windows Azure SDK 2.0
图 3 新诊断程序配置选项在 Windows Azure SDK 2.0

通过单击编辑按钮,您可以定义具体的数据收集,包括 Windows 性能计数器、 事件日志和日志目录 (图 4)。 在此示例中,将收集诊断信息为正在使用的处理器时间可用兆字节的内存和每秒的请求数的百分比,和转到 Windows 存储帐户每 30 分钟 (转让期间设置)。 这种新接口简化了配置诊断为云服务并获得计量数据供以后使用的过程。

Configuring Performance Counters in Visual Studio with the Windows Azure SDK 2.0
图 4 配置性能计数器在 Visual Studio 中与 Windows Azure SDK 2.0

除了监控选项 Windows Azure 平台提供的云服务,可能要看一看云忍者计量块释放由 Windows Azure 孵化团队,其中包括许多易于使用的库中的这些功能。 它是可利用的在 cnmb.codeplex.com

收集的数据,从 Windows Azure 的虚拟机

虚拟机在 Windows Azure 平台上运行的有状态实例可以单独部署或通过虚拟网络连接到云服务。 这些实例运行完整的 Windows 和 Linux 版本,因为收集诊断信息是类似于为房地上的机器,使用性能计数器,并坚持到本地存储的过程。 此信息提取的过程各不相同,但它通常通过当地的代理商,将此信息传递到外部服务安装成功。

从 Windows Azure 网站收集数据

现在让我们把注意力放到 Windows Azure 网站。 收集诊断信息的 Web 站点是一个简单的过程,可直接在管理门户中启用。 为监测多租户的应用程序,应激活 Web 服务器日志记录 (W3C 扩展的日志文件格式),并通过 FTP 下载的日志文件。 下面是需要执行的步骤:

  1. 访问 manage.windowsazure.com
  2. 选择 Web 站点,然后在需要配置的特定网站。
  3. 单击配置,然后向下滚动到"站点诊断程序"一节。 打开 Web 服务器日志记录。
  4. 您可以从 /LogFiles/http/RawLogs 下载日志。 日志分析器 2.2,可从 Microsoft 下载中心 (bit.ly/119mefJ),可以用于分析和查询 IIS 日志。

作为与 Windows Azure 云服务,从日志文件的信息可用于确定资源使用由不同的商户,通过跟踪各个虚拟目录或 URL 参数。

作为一种服务计量

本机由 Windows Azure 提供诊断选项,几个公司提供 Windows Azure 的计量服务。 例如,戴尔公司 创造了一种叫做雾灯,提供实时数据的应用程序和它回到 UX.的关系健康产品 它还包括一项通知服务,提醒开发人员的关键问题。 今天,雾­光支持云服务和 Windows Azure SQL 数据库,基于一团的基础设施,如图所示,在图 5

The Dell Foglight Monitoring Portal
图 5 监测门户戴尔雾灯

自动缩放选项

一旦已收集的计量和性能计数器数据,它可以用于确定所需满足的性能要求的应用程序的资源调配的水平。 在 Windows Azure 的自动缩放是指添加或减去从具体部署 (横向扩展),想法保持解决方案和尽可能低的成本为运行的实例的行为。 即使有可能扩大规模 (增加一台机器的资源),这通常意味着应用程序宕机时间,这是不可取。 基本上有三种方式向 Windows Azure 部署自动缩放。

使用自动缩放块 Windows Azure 的部署,特别适用于 Windows Azure 云计算服务,自动缩放到的一种办法是向解决方案中添加自动缩放应用程序块。 为此目的有几个用准备好的图书馆。 一个库是企业整合包的 Windows Azure 的一部分,它使用用户定义的规则,设置角色实例部署基于计数器或测量收集的一团中最小和最大数目的限制的集合。 这种方法已广泛地记录了微软模式 & 和做法的团队,可以发现在 bit.ly/18cr5mD图 6 显示基本的多租户架构与自动缩放块添加到解决方案中。

Using an Autoscaling Application Block Approach for Cloud Services
图 6 使用自动缩放应用程序块云服务的方法

使用外部服务有一些扩展服务供 Windows Azure 的部署,作为外部自动缩放应用程序块。 微软最近收购了 MetricsHub (metricshub.com),其中免费提供监测和自动缩放服务为 Windows Azure 订户。 外扩的逻辑基于持续的平均值、 领先指标、 尾随数据和具体的时间表。 您可以直接从管理门户 (Windows Azure 存储) 的加载项一节中添加该服务。 MetricsHub 支持 Windows Azure 云服务和 Windows Azure 的虚拟机,基于体系结构,从一团中提取信息和接收信息,从单一的状态实例上安装代理 (请参见图 7)。

MetricsHub Architecture
图 7 MetricsHub 建筑学

一旦成立了服务,MetricsHub 门户网站提供不同的阈值,维持健康的云环境中,基于 CPU 的范围目标这样的参数和队列中的消息数。 它还提供了之前预测成本和应用自动缩放选项之后, 真正自动调配过程中最聪明的方式尽可能平衡成本与性能 (见图 8)。

The MetricsHub Architecture Autoscaling Portal
图 8 MetricsHub 建筑自动缩放门户

使用自动化的 Windows 第三种方法基于 Windows PowerShell 脚本手动创建和直接针对 Windows Azure 管理 API 执行的 PowerShell 脚本。 这种方法提供了高水平的控制和灵活性,因为这些脚本可用于自定义应用程序或持续集成框架内。 此外,Windows Azure 为 Windows PowerShell cmdlet 支持三种部署模型,包括用于 Windows Azure 网站资源调配过程的自动化。 例如,更改为特定部署的实例的数量是一样容易执行以下命令:

PS C:\> Set-AzureWebsite –Name {WebSiteName} –NumberOfWorkers {Instances}

有关如何设置和安装 Windows Azure cmdlet 的说明,请参阅 bit.ly/QqctsU。 您可以找到有关如何使用每个 cmdlet 在文档 bit.ly/U0vOEp

总结

这篇文章的结论我们两部分的系列建筑多租户解决方案在 Windows Azure 上。 除了第一条中的身份和数据隔离,我们向您介绍配置和性能信息提取的每个 Windows Azure 部署模型的过程 — — 云服务、 虚拟机和 Web 站点。 同时,我们分析了三种不同方式的自动缩放部署通过内部和外部组件和服务。 通过利用云经济模型 — — 基于的使用成本和共享资源池 — — 更多的公司正在释放的解决方案,可以有效地适应他们的需要。

Bruno Terkaly是 Microsoft 的开发推广人员。他的知识深度来源于多年来相关领域以及使用大量平台、语言、框架、SDK、库和 API 编写代码的经验。他花时间写代码,博客,给现场演示构建基于云计算的应用程序,专门使用的 Windows Azure 平台。您可以阅读他的博客,在 blogs.msdn.com/b/brunoterkaly

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

Terkaly 和比利亚洛沃斯联合目前在逃的行业会议。 他们鼓励读者的 Windows Azure 内幕交易与他们联系的可用性。 也可以拨打 Terkaly bterkaly@microsoft.com 和比利亚洛沃斯也可以拨打 Ricardo.Villalobos@microsoft.com

衷心感谢以下技术专家对本文的审阅:特伦特 Swanson (满量程 180)
特伦特斯文森是一个软件架构师和校长在全规模 180 云与大数据技术工作。 我一直与 Windows Azure 自一开始就帮助客户周围的世界生成、 部署和管理其对 Windows Azure 的云计算解决方案。 无论是将现有应用程序迁移到云还是构建新应用程序,我都非常享受在 Windows Azure 上交付可扩展、可靠和可管理的云解决方案的整个生命周期。 在没有忙于有趣而充满挑战的项目时,我也很喜欢体操、综合格斗、为本地小型企业提供支持并积极参与教堂活动。