政策快报平台是一个典型的微服务系统,涉及API网关、爬虫服务、推送服务、推荐服务、搜索服务等多个模块。服务间依赖关系复杂,任何一个下游服务的故障都可能影响整体可用性。
2023年某次热门政策发布时,流量瞬间暴增10倍。推荐服务因数据库连接池耗尽而响应变慢,大量请求堆积,最终导致网关连接池也被占满,连政策列表和搜索功能都受到了影响。用户看到的不是“推荐不可用”,而是整个页面加载失败。
那次事件之后,我们做了一整套服务降级与熔断机制。本文复盘这次架构升级。
降级与熔断的4个核心机制
机制一:超时控制
每个服务调用都设置超时时间,防止某个慢服务拖垮整体。
超时策略分场景配置:查询类服务(政策列表、详情)设置2秒超时,写入类服务(收藏、订阅)设置5秒超时,复杂计算服务(推荐、分析)设置3秒超时。
超时触发后,网关层立即返回降级响应,不再等待慢服务返回。超时配置需要根据实际业务响应时间定期调整,每季度review一次,避免配置过短导致正常请求被误中断。
机制二:熔断
当下游服务持续失败或超时时,网关层自动“熔断”——不再向下游发送请求,直接返回降级响应。
熔断阈值:连续失败率超过50%(最近10个请求中至少5个失败),触发熔断。熔断开启后30秒尝试恢复(半开状态),放行1个请求探测下游是否已恢复。恢复成功则关闭熔断,失败则继续保持熔断状态。
机制三:降级
当系统资源紧张或下游服务不可用时,主动关闭非核心功能,保障核心功能可用。
降级分三个等级:一级降级(系统负载超过70%)关闭非核心功能(推荐、收藏、分享),释放资源给核心查询;二级降级(系统负载超过85%)降低非核心功能频率(推送延迟发送);三级降级(系统负载超过95%)仅保留核心功能(政策列表+详情+搜索)。
机制四:限流
在网关层对请求进行限流,防止突发流量击穿系统。
限流维度有三个:接口级限流(每个接口独立配置QPS上限)、用户级限流(单用户每秒请求数上限)、IP级限流(单IP每秒请求数上限)。超出限流阈值的请求返回429状态码(Too Many Requests),提示“请求过于频繁,请稍后再试”。
降级与熔断的优先级
限流是第一道防线——在入口处拦住过量请求,防止系统被流量冲垮。熔断是第二道防线——当下游服务出问题时快速切断故障链,防止故障蔓延。降级是第三道防线——当系统整体压力过大时主动牺牲非核心功能,保核心功能可用。
三层防护叠加,目标是让系统在任何异常情况下都能保持核心功能的可用性。
实践效果数据
| 指标 | 熔断降级前 | 熔断降级后 |
|---|---|---|
| 故障影响范围 | 局部故障可能扩散到整个系统 | 局部故障被隔离,影响面控制在单一服务 |
| 故障恢复时间 | 人工介入需要15-30分钟 | 熔断自动恢复,约30秒-2分钟 |
| 高峰期可用性 | 约95%(受下游服务影响波动) | 约99.5%(核心功能稳定可用) |
| 用户可见故障 | 整个页面不可用 | 仅非核心功能不可用,核心功能正常 |
经验总结
超时、熔断、降级、限流的配置需要结合实际业务场景不断调优,不可能一次到位。
降级策略要区分核心和非核心功能:核心功能(政策列表、详情、搜索)除非万不得已不降级,非核心功能(推荐、收藏、分享)可以优先降级。
告警和监控是保障机制正常运行的前提:没有监控,就无法判断熔断阈值是否合理、降级策略是否触发。
服务降级与熔断的核心目标不是“不出故障”,而是“出故障时影响面可控”。极限情况下,宁可让部分功能不可用,也不能让整个系统不可用。政策快报平台的实践表明:三层防护机制叠加,可以把故障影响面从“整个系统不可用”压缩到“个别非核心功能不可用”,大幅提升用户体验。