练习 - 手动缩放 Web 应用
你应该在预期流量增加时横向扩展系统。 也可以针对性能下降进行横向扩展。
在酒店预订系统示例中,当你预计会因为特殊事件、特殊优惠或季节性波动而带来额外流量时,需要增加 Web 应用的实例数。 当需求下降时,你会缩减系统。
本练习中要使用此计划创建应用服务计划并部署 Web 应用。 你在负载下监视 Web 应用的性能。 然后横向扩展应用并验证计划是否提高了应用的性能。
本练习使用实现 Web API 的示例 Web 应用。 Web API 公开 HTTP POST 和 GET 操作,这些操作用于创建和检索酒店预订网站的客户预订。 不会保存预订。 GET 操作只检索虚拟数据。
此练习还会运行一个客户端应用,模拟几个用户同时发出 POST 和 GET 操作。 此应用提供工作负载,用于测试 Web 应用在缩放之前和之后的性能。
创建应用服务计划和 Web 应用
重要
需要自己的 Azure 订阅才能运行此练习,这可能会产生费用。 如果还没有 Azure 订阅,请在开始前创建一个免费帐户。
登录到 Azure 门户。
在 Azure 门户菜单上或在“主页”中,选择“创建资源”。 此时会显示“创建资源”窗格。
在左侧菜单窗格中的“类别”下,选择“Web”,搜索并选择“Web 应用”,然后选择“创建”。 此时会显示“创建 Web 应用”面板。
在“基本信息”选项卡上,为每个设置输入以下值。
注意
Web 应用必须具有唯一名称。 建议使用类似于<姓名或姓名缩写 >hotelsystem 的名称。 在本练习中看见
<your-webapp-name>
时则使用此名称。设置 值 项目详细信息 订阅 选择要用于此练习的 Azure 订阅 资源组 选择“新建”链接,然后输入名为 mslearn-scale 的新资源组 实例详细信息 名称 请参阅表前的注释。 输入你能记住的唯一名称,便于在本练习稍后部分使用 发布 代码 运行时堆栈 .NET 6 (LTS) 操作系统 Windows 区域 接受默认值 应用服务计划 Windows 计划 接受默认值 定价计划 接受默认值 选择“查看 + 创建”>“创建”。 等待 Web 应用完成创建和部署。
生成并部署 Web 应用
在 Azure 任务栏中,选择 Cloud Shell 图标打开 AzureCloud Shell,然后运行以下命令,下载酒店预订系统的源代码。
git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
转到 mslearn-hotel-reservation-system/src 文件夹。
cd mslearn-hotel-reservation-system/src
生成酒店系统的应用。 有两个应用:一个 Web 应用来实现系统 Web API,一个客户端应用用于对 Web 应用进行负载测试。
dotnet build
做好发布 HotelReservationSystem Web 应用的准备。
cd HotelReservationSystem dotnet publish -o website
转到“网站”文件夹,其中包含已发布的文件。 压缩文件并将其部署到在上一个任务中创建的 Web 应用中。 将以下代码复制到记事本,并将
<your-webapp-name>
替换为 Web 应用的名称,然后将编辑后的代码块粘贴到 Cloud Shell 中并运行它。cd website zip website.zip * az webapp deploy --src-path website.zip --name <your-webapp-name> --resource-group mslearn-scale
使用 Web 浏览器转到
http://<your-webapp-name>.azurewebsites.net/api/reservations/1
。 此时会显示一个 JSON 文档,其中包含编号为 1 的预留的详细信息。
在横向扩展之前监视 Web 应用的性能
返回到 Cloud Shell,转到 ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient 文件夹。
cd ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient
使用代码编辑器编辑此文件夹中的 App.config 文件。
code App.config
取消评论指定
ReservationsServiceURI
的行,并将值 YOUR WEBSITE NAME 替换为 Web 应用的名称。 该文件应如下例所示。<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="NumClients" value="100" /> <add key="ReservationsServiceURI" value="https://<your-webapp-name>.azurewebsites.net/" /> <add key="ReservationsServiceCollection" value="api/reservations" /> </appSettings> </configuration>
注意
此文件中的
NumClients
设置指定可同时尝试连接到 Web 应用并执行工作的客户端数。 你需要创建预留,然后运行查询来提取预订的详细信息。 使用的所有数据都是虚假的。 这些数据不存在于任何地方。 将此值设置为100
。选择“Ctrl”+“S”来保存文件。
使用代码编辑器编辑此文件夹中的 HotelReservationSystemTestClient.csproj 文件。
code HotelReservationSystemTestClient.csproj
编辑指定
TargetFramework
的行,使其与你为 Web 应用选择的运行时堆栈匹配。 将TargetFramework
值更改为netcoreapp7.0
。 该文件应如下例所示。<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp7.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="12.0.1" /> <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.5.0" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\HotelReservationSystemTypes\HotelReservationSystemTypes.csproj" /> </ItemGroup> </Project>
通过选择 Ctrl+S 保存文件,然后按 Ctrl+Q 关闭代码编辑器。
使用新配置重新生成测试客户端应用。
dotnet build
运行客户端应用。 当客户端开始运行、创建预订和运行查询时,会看见显示几条消息。 让系统运行几分钟。 响应很慢,且很快客户端请求开始失败并显示 HTTP 408(超时)错误。
dotnet run
在 Azure 门户中,选择“转到资源”以打开 Web 应用。
在左侧菜单窗格中,选择“监视”下,然后选择“指标”。
在 Web 应用窗格的菜单栏右侧,依次选择“本地时间: 过去 24 小时(自动)”时间范围、“过去 30 分钟”和“应用”。
在窗格中的“图表标题”下,将以下指标添加到图表:
- 选择“添加指标”,然后在“指标”下拉列表中,选择“CPU 时间”。 对于“聚合”,请选择“汇总”。
- 选择“添加指标”,然后在“指标”下拉列表中,选择“Http 服务器错误”。 对于“聚合”,请选择“汇总”。
- 选择“添加指标”,然后在“指标”下拉列表中,选择“Http 4xx”。 对于“聚合”,请选择“汇总”。
- 选择“添加指标”,然后在“指标”下拉列表中,选择“响应时间”。 对于“聚合”,请选择“平均”。
在右侧菜单栏中,选择“固定到仪表板”。 此时会显示“固定到仪表板”窗格;选择“新建”选项卡。
在“仪表板名称”下拉列表中国,输入你的 Web 应用名称,然后选择“创建并固定”。
使系统运行五分钟以达到稳定状态,然后记下 CPU 时间、HTTP 4xx 错误数以及平均响应时间。 应会看到大量 HTTP 4xx 错误。 这些错误是 HTTP 408 超时错误。 平均响应时间为几秒钟。 可能偶尔发生 HTTP 服务器错误,具体取决于 Web 服务器如何处理负担。
执行下一个任务时,请保持客户端应用正常运行。
横向扩展 Web 应用并验证性能改进
在 Azure 门户中,选择你的 Web 应用名称(应用服务),然后在左侧菜单窗格的“设置”下,选择“横向扩展(应用服务计划)”。 此时显示“横向扩展(应用服务计划)”窗格。
在“配置”选项卡上,选择“手动缩放”,将“实例计数”设置为“5”。 选择“保存”。
切换到正在运行客户端应用的 Cloud Shell。 应会看到更少的请求失败和错误,尽管有些请求仍然超时。
再运行该应用五分钟。 接下来,转到 Azure 门户中的仪表板上显示应用指标的图表。 你应看到 CPU 时间大幅增加,因为现在可用的 CPU 计算能力是原来的五倍。 平均响应时间应会下降,HTTP 4xx 错误数也应会减少。 下图显示了一组典型结果。 记录了横向扩展发生的时间点。
如果希望进行更多试验,请尝试将应用服务计划的实例数增加到 10。 S1 层支持的最大实例数为 10。 你应该会注意到 CPU 时间在进一步增加,并且相应的响应时间和 HTTP 4xx 错误在减少。
返回到正在运行客户端应用的 Cloud Shell。 选择 Enter 停止应用。
在 Azure 门户中,将实例计数设置回 1。 选择你的 Web 应用,然后在左侧菜单窗格中,选择“横向扩展(应用服务计划)”。 在“配置”选项卡上,将“实例计数”设置为“1”,然后选择“保存”。