自动缩放和自定义域
根据 CPU 和 HTTP 队列指标配置横向扩展规则,将自定义域映射到 Web 应用,并绑定免费的应用服务托管证书。
自动缩放和自定义域 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。
自动缩放为何重要
自动缩放会根据实时需求自动调整运行应用程序的 App Service 实例数量。如果没有自动缩放,您必须按照峰值负载进行预配,并在非高峰时段为闲置容量付费。使用自动缩放后,Azure 会在负载上升时添加实例,在负载下降时移除实例,从而同时优化性能和成本。自动缩放要求使用 Standard 层或更高层级。
横向扩展与纵向扩展
Azure 提供两个扩展维度。横向扩展会添加更多相同的应用实例来分担负载,这是自动缩放主要执行的操作。纵向扩展会通过更改 App Service 计划 SKU,迁移到 CPU 和 RAM 更多的更大 VM 规格。由于多个实例可以承受单个实例的故障,横向扩展更有利于提高复原能力;纵向扩展则受硬件限制。
# Scale out to 5 instances manually
az appservice plan update \
--name MyAppServicePlan \
--resource-group MyRG \
--number-of-workers 5
# Scale up: change the SKU tier
az appservice plan update \
--name MyAppServicePlan \
--resource-group MyRG \
--sku P2V3自动缩放规则和配置文件
Azure 中的自动缩放通过附加到 App Service 计划的自动缩放设置进行配置。一个自动缩放设置包含一个或多个配置文件(常规、固定日期和重复),每个配置文件都包含规则。当指标超过阈值(例如 CPU > 70%)时,会触发横向扩展规则;当指标低于较低阈值(例如 CPU < 30%)时,会触发横向缩减规则。请始终同时定义横向扩展和横向缩减规则,以避免实例数量失控增长或成本过高。
# Create an autoscale setting with CPU-based rules
az monitor autoscale create \
--name MyAutoscale \
--resource-group MyRG \
--resource MyAppServicePlan \
--resource-type Microsoft.Web/serverfarms \
--min-count 2 \
--max-count 10 \
--count 2
# Add scale-out rule: CPU > 70% for 5 minutes
az monitor autoscale rule create \
--autoscale-name MyAutoscale \
--resource-group MyRG \
--scale out 2 \
--condition 'CpuPercentage > 70 avg 5m'基于计划的自动缩放
基于计划的自动缩放(重复配置文件)允许您针对可预测的流量模式提前扩展。例如,可以在每个工作日 08:00 将实例扩展到 10 个,并在 18:00 缩减到 2 个。结合使用基于计划和基于指标的配置文件,可以兼顾两者的优势:针对已知峰值提前准备容量,并对意外峰值做出弹性响应。
# Add a recurrence profile for weekday peak hours
az monitor autoscale profile create \
--autoscale-name MyAutoscale \
--resource-group MyRG \
--name 'WeekdayPeak' \
--min-count 5 \
--max-count 15 \
--count 5 \
--recurrence week mon tue wed thu fri \
--start 08:00 \
--end 18:00 \
--timezone 'UTC'冷却期
冷却期是指执行扩展操作后的一段延迟时间,在此期间不会进行进一步扩展。它可以防止因短暂的指标峰值触发快速、反复的横向扩展或横向缩减,从而避免资源抖动。默认的横向扩展冷却期为 5 分钟,横向缩减冷却期也为 5 分钟。请为横向缩减设置更长的冷却期(例如 10–15 分钟),以便实例在被移除前有时间排空活动连接。
# Scale-in rule with 10-minute cooldown
az monitor autoscale rule create \
--autoscale-name MyAutoscale \
--resource-group MyRG \
--scale in 1 \
--condition 'CpuPercentage < 30 avg 10m' \
--cooldown 10配置自定义域
App Service 应用会获得默认的 azurewebsites.net 主机名。若要使用您自己的域(例如 www.contoso.com),请在 App Service 设置中添加自定义域,并在域名注册商处创建相应的 DNS 记录。您需要在 DNS 区域中创建 CNAME 或 TXT 记录(称为验证记录)来证明所有权,然后创建实际用于路由的 CNAME 或 A 记录。
# DNS records at your registrar:
# CNAME www MyUniqueWebApp.azurewebsites.net
# TXT asuid.www <verification_id from Azure portal>
# After DNS propagation, add the custom domain in Azure
az webapp config hostname add \
--webapp-name MyUniqueWebApp \
--resource-group MyRG \
--hostname www.contoso.com自定义域的 TLS 证书
映射自定义域后,您需要使用TLS 证书来启用 HTTPS。App Service 提供三种选项:App Service Managed Certificate(免费、自动续订,但仅限标准域)、App Service Certificate(通过 Azure 购买并存储在 Key Vault 中)或上传第三方证书(从 Let's Encrypt 或 CA 获取您自己的证书)。仅 HTTPS 模式会自动将所有 HTTP 流量重定向到 HTTPS。
# Create a free App Service Managed Certificate
az webapp config ssl create \
--name MyUniqueWebApp \
--resource-group MyRG \
--hostname www.contoso.com
# Bind the certificate to enforce HTTPS
az webapp config ssl bind \
--name MyUniqueWebApp \
--resource-group MyRG \
--certificate-thumbprint <THUMBPRINT> \
--ssl-type SNI
# Enforce HTTPS only
az webapp update \
--name MyUniqueWebApp \
--resource-group MyRG \
--https-only true用于自动缩放的 HTTP 队列指标
虽然 CPU 是常见的自动缩放指标,但对于 Web 应用来说,HTTP 队列长度通常是更好的信号。当队列长度较高时,表示实例已全部繁忙,新请求正在等待。基于 HttpQueueLength 进行扩展比基于 CPU 更快地检测到过载,因为 CPU 可能发生波动,却不一定表示面向用户的延迟增加。请结合使用这两个指标,以实现可靠的自动缩放行为。
# Scale out when HTTP queue length exceeds 100
az monitor autoscale rule create \
--autoscale-name MyAutoscale \
--resource-group MyRG \
--scale out 2 \
--condition 'HttpQueueLength > 100 avg 1m' \
--cooldown 5
# Scale in when queue drops below 10
az monitor autoscale rule create \
--autoscale-name MyAutoscale \
--resource-group MyRG \
--scale in 1 \
--condition 'HttpQueueLength < 10 avg 10m' \
--cooldown 10自动缩放通知
请配置自动缩放通知,以便在发生缩放事件时接收电子邮件或 Webhook 警报。这有助于团队了解流量模式,并验证自动缩放是否按预期运行。通知在自动缩放设置的通知部分进行配置,可以发送到多个电子邮件地址和 Webhook 终结点(以便与 Slack、PagerDuty 或自定义工具集成)。
# Add email notification to autoscale setting
az monitor autoscale update \
--name MyAutoscale \
--resource-group MyRG \
--add-condition '{"email": {"sendToSubscriptionAdministrator": true, "customEmails": ["ops@contoso.com"]}, "webhooks": []}'顶级域名和流量 Manager
将顶级域名(例如不带 www 的 contoso.com)映射到 App Service,需要使用指向 App Service IP 地址的A 记录,以及 TXT 验证记录。由于 App Service 的 IP 地址可能发生变化,Microsoft 建议使用 Azure 流量 Manager 或 Azure Front Door 作为中间层——顶级域名的 CNAME 等效记录(ALIAS/ANAME 记录)指向 Traffic Manager 配置文件,再由该配置文件将流量路由到 App Service。
# Get the App Service inbound IP (for A record)
az webapp show \
--name MyUniqueWebApp \
--resource-group MyRG \
--query 'inboundIpAddress' -o tsv
# DNS at registrar (apex domain with A record approach)
# A contoso.com <inboundIpAddress>
# TXT asuid <verification_id>测试自动缩放行为
配置自动缩放后,请通过生成模拟负载来测试其是否正常工作。您可以使用 Apache JMeter、k6 或 Azure 负载测试 等工具来模拟并发用户。在 Azure Monitor 中观察 App Service 计划的实例数指标,确认负载上升时实例数增加、负载减小时实例数减少。记录观察到的每个实例的 RPS(每秒请求数),以验证您的缩放阈值。
# Run a quick load test with curl (basic)
for i in {1..100}; do curl -o /dev/null -s https://www.contoso.com/health & done
wait
# Monitor current instance count
az monitor metrics list \
--resource '/subscriptions/.../providers/Microsoft.Web/serverfarms/MyAppServicePlan' \
--metric 'InstanceCount' \
--interval PT1M快速检查
测试您对本课 Microsoft Azure 基础知识(AZ-900)概念的理解。
课程回顾
在本课中,您学习了以下内容:App Service 计划中的自动缩放规则会根据 CPU、HTTP 队列或计划触发器添加或删除实例;自定义域名需要在 DNS 区域中配置 DNS CNAME/A 记录以及 TXT 验证记录;TLS 证书(包括免费的托管证书)可为自定义域名启用 HTTPS。接下来,我们将学习 App Service 身份验证和网络。
常见问题解答
「自动缩放和自定义域」课时是免费的吗?
是的 — 「自动缩放和自定义域」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。
「自动缩放和自定义域」这节课中我会学到什么?
根据 CPU 和 HTTP 队列指标配置横向扩展规则,将自定义域映射到 Web 应用,并绑定免费的应用服务托管证书。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cloud & IT Cert Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「自动缩放和自定义域」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?
能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 创建应用服务计划和 Web 应用
- 部署槽位和交换
- 自动缩放和自定义域
- 应用服务身份验证和网络