需要非常高规模的应用程序方案可能会超过单个应用部署可用的计算资源容量。 投票应用程序、体育赛事和电视娱乐活动都是需要极其大规模的场景示例。 横向扩展应用可以满足高缩放要求。 为了应对极端负载要求,可以在单个区域和跨区域进行许多应用部署。
概述
应用服务环境是横向扩展的理想平台。选择可支持已知请求速率的应用服务环境配置后,开发人员可以采用“Cookie 切割机”方式部署其他应用服务环境,以实现所需的峰值负载容量。
注释
若要在注册 Azure 帐户之前开始使用 Azure 应用服务,请转到 试用应用服务,可在其中立即在应用服务中创建生存期较短的初学者 Web 应用。 不需要信用卡;没有承诺。
例如,假设在应用服务环境配置上运行的应用已经过测试,以每秒处理 20 K 请求(RPS)。 如果所需的峰值负载容量为 100 K RPS,则可以创建并配置五个(5)应用服务环境,以确保应用程序能够处理预计的最大负载。
由于客户通常使用自定义域(或虚域)访问应用,开发人员需要一种方法跨所有应用服务环境实例分发应用请求。 实现此目标的一个好方法是使用 Azure 流量管理器配置文件解析自定义域。 可将流量管理器配置文件配置为指向各个应用服务环境。 流量管理器将根据流量管理器配置文件中的负载均衡设置自动处理跨所有应用服务环境的分发客户。 无论所有应用服务环境都部署在单个 Azure 区域中,还是跨多个 Azure 区域在全球部署,此方法都有效。
此外,由于客户通过虚域访问应用,客户不知道运行应用的应用服务环境的数量。 因此,开发人员可以根据观察到的流量负载快速轻松地添加和删除应用服务环境。
下面的概念图描述了在单个区域内的三个应用服务环境中水平横向扩展的应用。
本文的其余部分将演练使用多个应用服务环境为示例应用设置分布式拓扑所涉及的步骤。
规划拓扑
在构建分布式应用占用空间之前,它有助于提前提供一些信息。
-
应用的自定义域: 客户将用于访问应用的自定义域名是什么? 对于示例应用,自定义域名为
www.asabuludemo.com
. - 流量管理器域: 创建 Azure 流量管理器配置文件时,请选择域名。 此名称将与 trafficmanager.cn 后缀结合使用,以注册流量管理器管理的域条目。 对于示例应用,选择的名称是 可缩放的 ase-demo。 因此,流量管理器管理的完整域名 scalable-ase-demo.trafficmanager.cn。
- 缩放应用占用空间的策略: 应用程序占用空间是否会分布在单个区域中的多个应用服务环境中? 多个区域? 这两种方法的混合匹配? 根据客户流量的来源以及应用支持的后端基础结构的其余部分可以缩放程度来做出决定。 例如,对于 100% 无状态应用程序,可以使用每个 Azure 区域中许多应用服务环境的组合大规模缩放应用,并乘以跨多个 Azure 区域部署的应用服务环境。 拥有 15 个以上的全球 Azure 区域可供选择,客户可以真正构建全球超大规模应用程序占用空间。 对于本文中使用的示例应用,在单个 Azure 区域(中国东部)创建了三个应用服务环境。
- 应用服务环境的命名约定: 每个应用服务环境都需要唯一的名称。 除了一个或两个应用服务环境之外,还有一个命名约定来帮助识别每个应用服务环境。 对于示例应用,使用了简单的命名约定。 三个应用服务环境的名称为 fe1ase、 fe2ase 和 fe3ase。
- 应用的命名约定: 由于将部署应用的多个实例,因此每个已部署应用的实例都需要一个名称。 应用服务环境的一个鲜为人知但方便的功能是,可以在多个应用服务环境中使用相同的应用名称。 由于每个应用服务环境都有唯一的域后缀,因此开发人员可以选择在每个环境中重复使用完全相同的应用名称。 例如,开发人员可以具有以下名称的应用: myapp.foo1.p.chinacloudsites.cn、 myapp.foo2.p.chinacloudsites.cn、 myapp.foo3.p.chinacloudsites.cn 等。但是,对于示例应用,每个应用实例也具有唯一的名称。 使用的应用实例名称为 webfrontend1、 webfrontend2 和 webfrontend3。
设置流量管理器配置文件
在多个应用服务环境中部署应用的多个实例后,可以将单个应用实例注册到流量管理器。 对于示例应用,scalable-ase-demo.trafficmanager.cn 需要流量管理器 配置文件,可将 客户路由到以下任何已部署的应用实例:
- webfrontend1.fe1ase.p.chinacloudsites.cn: 在第一个应用服务环境中部署的示例应用的实例。
- webfrontend2.fe2ase.p.chinacloudsites.cn: 第二个应用服务环境中部署的示例应用的实例。
- webfrontend3.fe3ase.p.chinacloudsites.cn: 第三个应用服务环境中部署的示例应用的实例。
注册多个 Azure 应用服务终结点(所有终结点 在同一 Azure 区域中运行)的最简单方法是支持 PowerShell Azure 资源管理器流量管理器。
第一步是创建 Azure 流量管理器配置文件。 下面的代码显示了如何为示例应用创建配置文件:
$profile = New-AzTrafficManagerProfile –Name scalableasedemo -ResourceGroupName yourRGNameHere -TrafficRoutingMethod Weighted -RelativeDnsName scalable-ase-demo -Ttl 30 -MonitorProtocol HTTP -MonitorPort 80 -MonitorPath "/"
请注意 RelativeDnsName 参数如何设置为 scalable-ase-demo。 此参数会导致创建域名 scalable-ase-demo.trafficmanager.cn 并与流量管理器配置文件相关联。
TrafficRoutingMethod 参数定义负载均衡策略流量管理器将用于确定如何将客户负载分散到所有可用终结点。 在此示例中,已选择 加权 方法。 因此,根据与每个终结点关联的相对权重,客户请求将分散到所有已注册的应用程序终结点中。
创建配置文件后,每个应用实例都会作为本机 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 。 每个 PowerShell 命令中的 TargetResourceId 参数引用三个已部署的应用实例之一。 流量管理器配置文件将负载分散到配置文件中注册的所有三个终结点。
所有三个终结点都对 Weight 参数使用相同的值 (10)。 这种情况导致流量管理器将客户请求分布到所有三个应用实例中相对均匀。
将应用的自定义域指向流量管理器域
最后一步是将应用的自定义域指向流量管理器域。 对于示例应用,请指向 www.asabuludemo.com
scalable-ase-demo.trafficmanager.cn
. 使用管理自定义域的域注册机构完成此步骤。
通过使用注册机构的域管理工具,创建指向流量管理器域的自定义域的 CNAME 记录。 下图显示了此 CNAME 配置的外观示例:
尽管本主题未介绍,但请记住,每个单独的应用实例也需要为其注册自定义域。 否则,如果请求将其提交到应用实例,并且应用程序尚未向应用注册自定义域,则请求将失败。
在此示例中,自定义域是 www.asabuludemo.com
,每个应用程序实例都有与之关联的自定义域。
有关向 Azure 应用服务应用注册自定义域的回顾,请参阅 注册自定义域。
尝试分布式拓扑
流量管理器和 DNS 配置的最终结果是请求 www.asabuludemo.com
将流经以下顺序:
- 浏览器或设备将进行 DNS 查找
www.asabuludemo.com
- 域注册机构的 CNAME 条目会导致 DNS 查找重定向到 Azure 流量管理器。
- 针对其中一个 Azure 流量管理器 DNS 服务器 scalable-ase-demo.trafficmanager.cn 进行 DNS 查找。
- 根据 之前在 TrafficRoutingMethod 参数中指定的负载均衡策略,流量管理器选择其中一个配置的终结点。 然后,它将该终结点的 FQDN 返回到浏览器或设备。
- 由于终结点的 FQDN 是应用服务环境中运行的应用实例的 URL,因此浏览器或设备会要求 Azure DNS 服务器将 FQDN 解析为 IP 地址。
- 浏览器或设备会将 HTTP/S 请求发送到 IP 地址。
- 请求将到达在某个应用服务环境上运行的应用实例之一。
下面的控制台图片显示了示例应用的自定义域的 DNS 查找。 它成功解析为在三个示例应用服务环境之一上运行的应用实例(在本例中,三个应用服务环境中的第二个):