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 应用及 TSF Mesh 应用两种微服务框架的服务熔断。
控制台基本操作
假设用户希望在
consumer-demo
上针对下游服务provider-demo
设置一个熔断策略。新建并启用熔断规则
注意
一个服务的不同熔断规则的下游目标服务不能重复。
1. 登录 TSF 控制台,在左侧导航栏单击服务治理,单击
consumer-demo
服务进入服务详情页。2. 切换至服务熔断标签页,单击新建熔断规则,在创建熔断规则对话框中填写熔断规则:
下游服务: 选择当前
provider-demo
所在命名空间和服务名。隔离级别:根据业务场景需求设置隔离级别
服务:选择服务隔离级别后,设置熔断策略各参数。
实例:选择实例隔离级别后,设置熔断策略各参数和最大熔断实例比率。
API:选择 API 隔离级别后,可选择不同的 API 设置熔断策略,熔断策略中各参数适用于选中的每个 API。
滑动时间窗口:用于统计熔断器关闭时的请求结果。
最少请求次数:配置熔断器可以计算错误率之前的最小请求数。
触发条件(满足以下任一条件触发熔断):
失败请求率:在滑动时间窗口内统计的失败请求占所有请求比率(失败请求是指响应状态码为4XX和5XX,以及抛出异常的请求)。
慢请求率:在滑动时间窗口内统计的慢响应的请求占所有请求比率,其中慢响应的时长支持配置。
开启到半开间隔:熔断器从
open
状态等待一段时间后变为 half-open
状态,尝试放行一部分请求到下游服务。3. 单击完成,跳转至熔断规则列表。
4. 在熔断规则列表上,单击熔断规则的启用,启用该规则。