服务熔断原理及使用

最近更新时间:2020-01-16 10:37:30

TSF 服务治理支持可视化熔断规则管理,支持设置服务、实例、API 三种隔离级别的熔断规则。

熔断原理

定义

服务熔断定义:当下游的服务因为某种原因导致服务不可用或响应过慢时,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回。当下游服务恢复后,上游服务会恢复调用。

熔断器状态

服务熔断中涉及到关键概念熔断器,熔断器的状态转化如下:

  1. 最开始处于closed状态,一旦检测到错误(或慢响应)达到一定阈值,便转为open状态,此时不再调用下游目标服务。
  2. 等待一段时间后,会转化为half open状态,尝试放行一部分请求到下游服务。
  3. 一旦检测到响应成功,回归到closed状态,也即恢复服务;否则回到open状态。

其中熔断器从close变为open状态要同时满足以下2个条件:

  • 前提条件:在滑动时间窗口内至少有一定数量的请求(即最少请求数
  • 指标达到阈值:在滑动时间窗口内统计的错误请求率或慢请求率达到一定阈值

隔离级别及场景

TSF 支持服务、实例、API 三种隔离级别的熔断规则:

隔离级别 请求统计范围 熔断对象 适用场景
服务 下游目标服务的所有实例的所有 API 服务 当下游服务属于不主要的业务,可以熔断所有实例
实例 下游目标服务的单个实例的所有 API 达到熔断触发条件的实例 当下游服务属于比较重要的业务,只对异常的实例进行熔断,避免所有实例被熔断后导致服务雪崩
API 下游目标服务的所有实例的指定 API 达到熔断触发条件的单个 API 下游服务不同 API 的重要程度不同,需要根据不同 API 设置不同的熔断策略

使用方法

不同于服务限流、路由和鉴权规则在被调服务上设置,服务熔断规则是在主调方服务上设置。

开发指南

目前 TSF 支持 Spring Cloud 应用的服务熔断,Mesh 应用的熔断功能将于近期发布。

Spring Cloud 熔断开发指南参考 开发文档,注意 Spring Cloud 应用的服务熔断功能需要使用 1.19.0 版本及以上的 SDK,参考 SDK 版本更新日志

控制台基本操作

假设用户希望在consumer-demo上针对下游服务provider-demo设置一个熔断策略。

新建并启用熔断规则

注意:


一个服务的不同熔断规则的下游目标服务不能重复。

  1. 登录 TSF 控制台,在左侧导航栏单击【服务治理】,单击consumer-demo服务进入服务详情页。
  2. 切换至【服务熔断】标签页,单击【新建熔断规则】,在创建熔断规则对话框中填写熔断规则:
    • 下游服务: 选择当前 provider-demo 所在命名空间和服务名。
    • 隔离级别:根据业务场景需求设置隔离级别
      • 服务:选择服务隔离级别后,设置熔断策略各参数。
      • 实例:选择实例隔离级别后,设置熔断策略各参数和最大熔断实例比率。
      • API:选择 API 隔离级别后,可选择不同的 API 设置熔断策略,熔断策略中各参数适用于选中的每个 API。
    • 滑动时间窗口:用于统计熔断器关闭时的请求结果。
    • 最少请求次数:配置熔断器可以计算错误率之前的最小请求数。
    • 触发条件(满足以下任一条件触发熔断):
      • 失败请求率:在滑动时间窗口内统计的失败请求占所有请求比率(失败请求是指响应状态码为4XX和5XX,以及抛出异常的请求)。
      • 慢请求率:在滑动时间窗口内统计的慢响应的请求占所有请求比率,其中「慢响应」的时长支持配置。
    • 开启到半开间隔:熔断器从 open 状态等待一段时间后变为 half-open 状态,尝试放行一部分请求到下游服务。
    • 最大熔断实例比率:该参数仅适用于实例隔离级别,用于控制最大熔断实例个数百分比,避免下游服务所有实例被熔断导致级联雪崩。例如当下游服务有20个实例且最大熔断实例比率为50%,熔断器最多熔断10个实例。
  3. 单击【完成】,跳转至熔断规则列表。
  4. 在熔断规则列表上,单击熔断规则的【启用】,启用该规则。