运行状况探测与优雅降级
配置负载均衡器和 Traffic Manager 的运行状况探测,以便快速检测故障,并为应用层设计断路器和优雅降级模式。
运行状况探测与优雅降级 是 CoddyKit 上的免费 Azure Fundamentals 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Azure Fundamentals 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Azure Fundamentals 课程共包含 4 节课。
运行状况探测为何不可或缺
运行状况探测是负载均衡器和流量管理器用来检测后端实例是否能够处理请求的机制。如果没有运行状况探测,负载均衡器可能会继续向发生故障或无响应的服务器发送流量,从而导致用户看到错误。正确配置运行状况探测后,系统便可在故障发生后的几秒内自动重新路由流量,避开运行状况不佳的实例。
Azure Load Balancer 运行状况探测
Azure Load Balancer 支持两种运行状况探测:
- TCP 探测 — 检查后端是否能在指定端口接受 TCP 连接。方式简单,但不会验证应用程序逻辑。
- HTTP/HTTPS 探测 — 向指定路径发送 GET 请求,并期望获得 200 OK 响应。由于它会直接测试应用程序终结点,因此结果更准确。
如果探测连续多次失败,且失败次数达到可配置的阈值,后端就会被标记为运行状况不佳。
# Create an HTTP health probe for an Azure Load Balancer:
az network lb probe create \
--resource-group myRG \
--lb-name myLoadBalancer \
--name httpHealthProbe \
--protocol Http \
--port 80 \
--path /health \
--interval 15 \
--threshold 2设计可靠的运行状况终结点
设计良好的运行状况终结点(/health)不只是返回 200 OK,还会验证应用程序的关键依赖项是否可访问。全面的运行状况检查可能会测试与数据库、缓存以及任何下游 API 的连接。如果任一依赖项不可用,终结点就会返回5xx 状态代码,通知负载均衡器将此实例移出轮换。
# Example health endpoint response (JSON):
# GET /health
# {
# 'status': 'healthy',
# 'checks': {
# 'database': 'ok',
# 'cache': 'ok',
# 'externalApi': 'ok'
# }
# }
# If database check fails, return HTTP 503 instead of 200Traffic Manager 运行状况探测
Azure Traffic Manager 也使用运行状况探测,但其探测范围是区域级别。它会定期向每个区域中配置的终结点 URL 发送 HTTP 或 HTTPS GET 请求。如果某个终结点在超时窗口内未响应,并且连续多个间隔都出现这种情况,Traffic Manager 就会将该终结点标记为性能下降,停止将 DNS 查询路由到该终结点,并将用户重定向到运行正常的区域。
# Configure Traffic Manager health probe settings:
az network traffic-manager profile update \
--resource-group myRG \
--name myTMProfile \
--monitor-protocol HTTPS \
--monitor-port 443 \
--monitor-path /health \
--monitor-interval 30 \
--monitor-timeout 10 \
--monitor-tolerated-failures 3Application Gateway 运行状况探测
Azure Application Gateway 的运行状况探测功能比标准 Load Balancer 更完善。它支持自定义探测,可指定主机标头、预期状态代码范围(例如 200-399)以及正文匹配字符串。Application Gateway 还支持按路径路由,因此不同的后端池可以针对不同 URL 路径使用不同的运行状况探测配置。
# Create a custom probe for Application Gateway:
az network application-gateway probe create \
--gateway-name myAppGateway \
--resource-group myRG \
--name customProbe \
--protocol Http \
--host-name-from-http-settings true \
--path /api/health \
--interval 20 \
--timeout 10 \
--threshold 3什么是优雅降级?
优雅降级是指当一个或多个依赖项发生故障时,应用程序仍能继续提供部分功能的能力。应用程序不会完全崩溃,而是检测到非关键服务不可用后,切换到功能受限但仍然有用的状态。例如,如果推荐服务发生故障,电子商务网站可以显示通用推荐,而不是让整个商品页面崩溃。
Circuit 断路器模式
Circuit 断路器模式可防止应用程序反复调用发生故障的下游服务。当服务开始发生故障时,断路器会打开,不再进行网络调用,而是立即返回错误或回退响应。经过冷却时间后,它会进入半开状态并允许一次试探性请求。如果请求成功,断路器就会关闭,系统恢复正常运行。
# Circuit breaker states:
# CLOSED: normal operation, calls pass through
# OPEN: service failing, calls immediately return error/fallback
# HALF-OPEN: cool-down expired, try one request:
# success -> CLOSED
# failure -> OPEN (reset timer)
# Libraries: Polly (.NET), Resilience4j (Java), polly-js (JS)使用 Exponential 退避进行重试
对于瞬时故障(短暂的网络波动、服务临时过载),适合采用使用 Exponential 退避进行重试的策略。应用程序会在延迟一段时间后重试失败的调用,并在每次重试时将延迟时间加倍,直到达到上限。在延迟时间中加入jitter(随机变化),可以防止所有重试请求同时发出,从而压垮正在恢复的服务。
# Exponential backoff with jitter (pseudocode):
# attempt 1: wait 1s + random(0-500ms)
# attempt 2: wait 2s + random(0-500ms)
# attempt 3: wait 4s + random(0-500ms)
# attempt 4: wait 8s + random(0-500ms)
# max retries: 4
# max wait: 30s (cap)
# After max retries: return error to caller舱壁模式
舱壁模式将应用程序的不同部分隔离到不同的资源池中,使某个区域发生故障时不会耗尽所有资源并导致整个系统崩溃。该模式得名于船舶中的舱壁:舱壁可以防止某个进水舱室导致整艘船沉没。在 Azure 中,这可能意味着为不同服务使用独立的线程池或独立的App Service 计划,从而将故障限制在局部范围内。
回退响应和缓存数据
一种常见的优雅降级技术是:当实时数据源不可用时,提供缓存数据或过期数据。例如,如果数据库暂时无法访问,产品目录页面可以从Azure Cache for Redis提供昨天缓存的价格,而不是显示错误。用户只会遇到轻微不便(价格略有过期),而不会完全无法使用服务。
监控并针对降级发出警报
优雅降级应该可见且可量化。使用Application Insights将断路器打开、回退响应和重试次数记录为自定义指标。设置警报,在这些指标超过阈值时通知值班团队,以便团队了解应用程序正在降级运行,即使面向用户的体验看起来仍然可以接受。
快速检查
请测试您对本课 Microsoft Azure 基础知识 (AZ-900) 概念的理解。
课程回顾
本课您学到了:健康探测可以让负载均衡器检测发生故障的后端并自动重新路由流量;优雅降级可以在依赖项发生故障时让应用程序保持部分可用;而Circuit 断路器、带退避的重试和舱壁等模式则在应用程序层实现弹性。接下来,我们将学习灾难恢复概念——定义 RTO、RPO 和恢复层级。
常见问题解答
「运行状况探测与优雅降级」课时是免费的吗?
是的 — 「运行状况探测与优雅降级」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Azure Fundamentals 课程的其余内容,请升级到 CoddyKit PRO。 Azure Fundamentals 课程共包含 4 节课。
「运行状况探测与优雅降级」这节课中我会学到什么?
配置负载均衡器和 Traffic Manager 的运行状况探测,以便快速检测故障,并为应用层设计断路器和优雅降级模式。 你通过在浏览器中直接运行的动手代码来练习 Azure Fundamentals,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Azure Fundamentals 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Azure Fundamentals 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「运行状况探测与优雅降级」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Azure Fundamentals 课中编写并运行代码吗?
能。每节 Azure Fundamentals 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Azure SLA 与复合 SLA
- 可用性集与可用性区域
- 多区域主主架构
- 运行状况探测与优雅降级