具有App Service Environment的异地分布水平缩放

需要高扩展性的应用场景可能会超出单次应用部署所能提供的计算资源容量。 投票应用程序、体育赛事和电视娱乐活动是需要大规模场景的示例。 可以通过横向扩展应用来支持大规模需求。 为了应对极端负载要求,可以在单个区域和跨区域进行许多应用部署。

本文概述了如何使用示例应用和多个应用服务环境创建分布式拓扑。 水平缩放通过使用 Azure Traffic Manager 来完成。

水平缩放过程概述

应用服务环境是横向扩展的理想平台。选择能够支持已知请求速率的应用服务环境配置后,开发人员可以以“标准化”方式部署更多的应用服务环境,以实现所需的峰值负载容量。

假设在 App Service Environment 配置上运行的应用经过测试,以每秒处理 20,000 请求(RPS)。 如果所需的峰值负载容量为 100 K RPS,则可以创建并配置五个应用服务环境,以确保应用程序能够处理最大投影负载。

由于客户通常使用自定义(或 vanity) 域访问应用,因此开发人员需要一种方法跨所有App Service Environment实例分发应用请求。 实现此目标的一个好方法是使用 流量管理器配置文件解析自定义域。 可以将配置文件配置为指向所有单独的应用服务环境。 流量管理器根据配置文件中的负载均衡设置自动处理客户在所有应用服务环境中的分布。 无论所有应用服务环境都部署在单个Azure区域中,还是跨多个Azure区域在全球部署,此方法都有效。

在此方案中,客户通常通过虚域访问应用。 他们不知道运行应用的应用服务环境的数量。 开发人员可以根据观察到的流量负载快速轻松地添加和删除应用服务环境。

下图显示了一个应用在单个区域内跨三个 App Service Environments 水平扩展的情况。

使用 Azure Traffic Manager 的地理分布式应用服务体系结构图。

拓扑要求

若要生成分布式应用,需要以下信息:

  • 应用的自定义域:确定客户用于访问应用的自定义或虚名域名。 对于本文中的示例应用,自定义域名为 www.asabuludemo.com.

  • 流量管理器域:创建 流量管理器配置文件时选择域名。 该名称与 trafficmanager.cn 后缀相结合,指示流量管理器维护域条目的注册和管理。 对于示例应用,域名为 scalable-ase-demo. 流量管理器管理的完整域名为 scalable-ase-demo.trafficmanager.cn

  • 缩放应用占用的策略:确定应用如何在多个应用服务环境中分布:单个区域、多个区域或组合。 考虑用户流量的来源,以及应用程序支持的后端基础设施其余部分的扩展能力。

    假设有一个可以大规模扩展的完全无状态的应用程序。 可以组合使用每个 Azure 区域内的多个应用服务环境,并将这些环境部署到多个 Azure 区域中。 Azure在众多全球区域可用,支持全球范围内的超大规模应用。 示例应用在单个Azure区域(中国北部 2)中使用三个应用服务环境。

  • 应用服务环境的命名约定:定义用于命名应用服务环境的约定。 每个 App Service Environment 都需要唯一的名称。 如果有不止一个或两个应用服务环境,创建一个命名约定以识别每个 App Service Environment 会很有帮助。 示例应用实现简单的命名约定。 三个应用服务环境的名称是 fe1asefe2ase以及 fe3ase

  • 应用的命名约定:定义用于命名应用的约定。 由于部署了应用的多个实例,因此需要为部署的应用的每个实例命名。 应用服务环境允许跨多个应用服务环境使用相同的应用名称。 由于每个App Service Environment都有唯一的域后缀,因此开发人员可以在每个环境中重复使用相同的应用名称。 例如,你可能有多个名为 myapp.env1.p.chinacloudsites.cnmyapp.env2.p.chinacloudsites.cnmyapp.env3.p.chinacloudsites.cn 等等的应用。 对于示例应用,每个应用实例都有一个唯一的名称: webfrontend1webfrontend2webfrontend3

流量管理器配置文件

跨多个应用服务环境部署应用的多个实例后,可以将应用实例注册到流量管理器。 示例应用程序需要为 scalable-ase-demo.trafficmanager.cn 地址创建一个流量管理器配置文件。 当客户访问此位置时,配置文件配置会将它们路由到部署的应用实例:

  • webfrontend1.fe1ase.p.chinacloudsites.cn:在第一个 *App Service Environment* 上部署的示例应用实例。
  • webfrontend2.fe2ase.p.chinacloudsites.cn:在第二个 App Service Environment 上部署的示例应用实例。
  • webfrontend3.fe3ase.p.chinacloudsites.cn:第三个App Service Environment上部署的示例应用实例。

创建配置文件

注册在 same Azure 区域中运行的多个应用服务终结点的最简单方法是使用 Azure PowerShell。 第一步是创建流量管理器配置文件。 以下代码为示例应用创建一个名为 scalableasedemo 的新配置文件。

$profile = New-AzTrafficManagerProfile –Name scalableasedemo -ResourceGroupName demo-resource-group -TrafficRoutingMethod Weighted -RelativeDnsName scalable-ase-demo -Ttl 30 -MonitorProtocol HTTP -MonitorPort 80 -MonitorPath "/"

请注意如何将 -RelativeDnsName 参数设置为 scalable-ase-demo。 该命令使用此参数创建域名 scalable-ase-demo.trafficmanager.cn 并将其与流量管理器配置文件相关联。

-TrafficRoutingMethod 参数定义负载均衡策略流量管理器用于确定如何在所有可用终结点之间分配客户负载。 示例应用使用 Weighted 方法。 客户请求根据与每个终结点关联的相对权重在所有已注册的应用程序终结点之间分配。

将应用实例添加到配置文件

下一步是将每个应用实例作为 Azure 原生终结点添加到配置文件中。 以下代码提取对每个前端 Web 应用的引用。 然后,它通过 -TargetResourceId 参数将每个应用添加为流量管理器终结点。

$webapp1 = Get-AzWebApp -Name webfrontend1
Add-AzTrafficManagerEndpointConfig –EndpointName webfrontend1 –TrafficManagerProfile $profile –Type AzureEndpoints -TargetResourceId $webapp1.Id –EndpointStatus Enabled –Weight 10

$webapp2 = Get-AzWebApp -Name webfrontend2
Add-AzTrafficManagerEndpointConfig –EndpointName webfrontend2 –TrafficManagerProfile $profile –Type AzureEndpoints -TargetResourceId $webapp2.Id –EndpointStatus Enabled –Weight 10

$webapp3 = Get-AzWebApp -Name webfrontend3
Add-AzTrafficManagerEndpointConfig –EndpointName webfrontend3 –TrafficManagerProfile $profile –Type AzureEndpoints -TargetResourceId $webapp3.Id –EndpointStatus Enabled –Weight 10

Set-AzTrafficManagerProfile –TrafficManagerProfile $profile

请注意针对每个应用程序实例的Add-AzureTrafficManagerEndpointConfig命令。 -TargetResourceId每个命令中的参数引用三个已部署的应用实例之一。 流量管理器配置文件在配置文件中注册的所有三个终结点之间分配负载。

这三个终结点都对 -Weight 参数使用相同的值(10)。 流量管理器将客户请求分发到所有三个应用实例中,尽可能均匀。

有关详细信息,请参阅 使用 PowerShell 管理流量管理器

与流量管理器的自定义域连接

配置配置文件并添加实例后,可以将应用的自定义域指向流量管理器域。 示例应用将www.asabuludemo.com自定义域指向流量管理器域。 scalable-ase-demo.trafficmanager.cn

在配置中,使用管理自定义域的域注册机构完成此任务。 使用您的注册商的域管理工具,创建一个CNAME记录,使自定义域指向流量管理器域。

您可以在 Azure 门户的 DNS 区域>>下查看 DNS 区域 配置。 以下图像展示了 CNAME 配置示例:

在 Azure 门户中截图展示了 DNS 区域配置,其中记录集和 CNAME 记录被突出显示。

注册所有应用实例

建立连接后,需要向每个单独的应用实例注册自定义域。 如果请求到达应用实例,并且该实例没有自定义域注册,则请求将失败。

注释

本文不介绍应用实例注册过程。 请务必使用管理自定义域的域注册机构完成配置过程。

在示例应用方案中,自定义域是 www.asabuludemo.com,每个应用实例都与自定义域相关联。 下图显示了此配置:

显示 Azure 门户中 Web 应用的自定义域设置的截图。

有关详细信息,请参阅 在 Azure App Service

流量分布拓扑

当所有 Web 应用实例都可以到达流量管理器域时,站点的请求 www.asabuludemo.com 将按照以下顺序进行。 该序列使用示例应用程序中资源的配置名称。

  1. 浏览器或设备对站点 www.asabuludemo.com进行 DNS 查找。

  2. 域注册机构的 CNAME 条目会导致 DNS 查找重定向到流量管理器。

  3. 针对其中一个流量管理器 DNS 服务器对 scalable-ase-demo.trafficmanager.cn 域进行 DNS 查找。

  4. 根据参数中指定的 -TrafficRoutingMethod 负载均衡策略,流量管理器选择其中一个配置的终结点。 然后,它将该终结点的 FQDN 返回到浏览器或设备。

  5. 由于终结点的 FQDN 是在App Service Environment上运行的应用实例的 URL,浏览器或设备请求Azure DNS服务器将 FQDN 解析为 IP 地址。

  6. 浏览器或设备将 HTTP/S 请求发送到 IP 地址。

  7. 该请求到达一个应用服务环境上运行的应用实例之一。

下图显示了示例应用的自定义域的 DNS 查找。 它已成功解析为在三个示例应用服务环境之一上运行的应用实例(在本例中,三个应用服务环境 fe2ase中的第二个)。

命令提示符窗口的屏幕截图,其中包含 DNS 查找结果。