《从 0 开始学架构》学习归整(十四)如何应对接口级故障?

内容纲要

接口故障的表现

接口故障的表现就是系统没有宕机、网络没有中断,但业务却出现问题。如:响应缓慢、大量响应超时、大量响应错误等。

故障原因

  • 内部原因:程序 BUG 等
  • 外部原因:黑客攻击等

解决思路

核心思想:优先保证核心业务优先保证绝大部分用户

降级

降级是指将系统的某些业务或者接口的功能降低(可以只提供部分功能或完全停止功能)。核心思想是:弃车保帅,优先保证核心业务。目的是应对系统自身故障

降级方式

系统后门降级

  • 原理:系统预留后门用于降级操作
  • 优点
    • 实现简单
  • 缺点
    • 后门安全得跟上
    • 服务器过多时,操作成本高

独立降级系统

  • 原理:将降级功能独立成一个子系统,提供权限管理、批量操作等功能
  • 优点
    • 安全性有保障
    • 批量操作可以做到快速响应
  • 缺点
    • 实现复杂

独立降级系统

熔断

熔断的手段也是停止某功能,其目的是应对依赖的外部系统的故障

设计关键

统一的 API 调用层

由 API 调用层来采样或统计。

阈值设计

  1. 分析确定阈值
  2. 上线观察
  3. 调优

限流

只接受系统能够承受的访问量的请求,达到阈值后的请求将丢弃或者转移。

限流方式

基于请求限流

  • 原理:即从外部访问的请求角度考虑决定限流策略。
    • 限制总量:限制某个指标的累积上限
    • 限制时间量:限制一段时间内的某个指标的上限
  • 优点
    • 实现简单
  • 缺点
    • 阈值难确定(通常采用压测等方式确定,再逐步优化)
    • 硬件影响大
  • 应用场景:业务功能比较简单的系统(负载均衡、网关等)

基于资源限流

  • 原理:找到系统内部影响性能的关键资源(连接数、线程数、CPU 资源等),对其使用上限进行限制
  • 优点
    • 更加有效的反映系统当前的压力
  • 缺点
    • 确定关键资源及其阈值较难(通常需要逐步调优)

排队

  • 原理:排队是限流的一个变种,限流核心是拒绝,排队核心是等待
  • 优点
    • 能够处理更多的请求
  • 缺点
    • 需要缓存大量临时请求数据(单系统难支撑,需要独立系统实现)
    • 调度模块设计较复杂
  • 实现细节
    • 排队模块:负责接收请求
    • 调度模块:负责排队模块到服务模块的调度(根据服务模块使用量,决定队列中的数据何时提交到服务模块)
    • 服务模块:处理业务并返回结果

排队

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注