内容纲要
接口故障的表现
接口故障的表现就是系统没有宕机、网络没有中断,但业务却出现问题。如:响应缓慢、大量响应超时、大量响应错误等。
故障原因
- 内部原因:程序 BUG 等
- 外部原因:黑客攻击等
解决思路
核心思想:优先保证核心业务和优先保证绝大部分用户。
降级
降级是指将系统的某些业务或者接口的功能降低(可以只提供部分功能或完全停止功能)。核心思想是:弃车保帅,优先保证核心业务。目的是应对系统自身故障。
降级方式
系统后门降级
- 原理:系统预留后门用于降级操作
- 优点
- 实现简单
- 缺点
- 后门安全得跟上
- 服务器过多时,操作成本高
独立降级系统
- 原理:将降级功能独立成一个子系统,提供权限管理、批量操作等功能
- 优点
- 安全性有保障
- 批量操作可以做到快速响应
- 缺点
- 实现复杂



熔断
熔断的手段也是停止某功能,其目的是应对依赖的外部系统的故障。
设计关键
统一的 API 调用层
由 API 调用层来采样或统计。
阈值设计
- 分析确定阈值
- 上线观察
- 调优
限流
只接受系统能够承受的访问量的请求,达到阈值后的请求将丢弃或者转移。
限流方式
基于请求限流
- 原理:即从外部访问的请求角度考虑决定限流策略。
- 限制总量:限制某个指标的累积上限
- 限制时间量:限制一段时间内的某个指标的上限
- 优点
- 实现简单
- 缺点
- 阈值难确定(通常采用压测等方式确定,再逐步优化)
- 硬件影响大
- 应用场景:业务功能比较简单的系统(负载均衡、网关等)
基于资源限流
- 原理:找到系统内部影响性能的关键资源(连接数、线程数、CPU 资源等),对其使用上限进行限制
- 优点
- 更加有效的反映系统当前的压力
- 缺点
- 确定关键资源及其阈值较难(通常需要逐步调优)
排队
- 原理:排队是限流的一个变种,限流核心是拒绝,排队核心是等待
- 优点
- 能够处理更多的请求
- 缺点
- 需要缓存大量临时请求数据(单系统难支撑,需要独立系统实现)
- 调度模块设计较复杂
- 实现细节
- 排队模块:负责接收请求
- 调度模块:负责排队模块到服务模块的调度(根据服务模块使用量,决定队列中的数据何时提交到服务模块)
- 服务模块:处理业务并返回结果


