服务熔断
最近更新时间: 2024-10-17 17:10:00
TSF 服务治理支持可视化熔断规则管理,支持设置服务、实例、API 三种隔离级别的熔断规则。
熔断原理
定义
服务熔断定义:当下游的服务因为某种原因导致服务不可用或响应过慢时,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回。当下游服务恢复后,上游服务会恢复调用。
熔断器状态
服务熔断中涉及到关键概念熔断器,熔断器的状态转化如下:
最开始处于
closed
状态,一旦检测到错误(或慢响应)达到一定阈值,便转为open
状态,此时不再调用下游目标服务。等待一段时间后,会转化为
half open
状态,尝试放行一部分请求到下游服务。一旦检测到响应成功,回归到
closed
状态,也即恢复服务;否则回到open
状态。
其中熔断器从close
变为open
状态要同时满足以下2个条件:
前提条件:在滑动时间窗口内至少有一定数量的请求(即最少请求数)
指标达到阈值:在滑动时间窗口内统计的错误请求率或慢请求率达到一定阈值
隔离级别及场景
TSF 支持服务、实例、API 三种隔离级别的熔断规则:
隔离级别 | 请求统计范围 | 熔断对象 | 适用场景 |
---|---|---|---|
服务 | 下游目标服务的所有实例的所有 API | 服务 | 当下游服务属于不主要的业务,可以熔断所有实例 |
实例 | 下游目标服务的单个实例的所有 API | 达到熔断触发条件的实例 | 当下游服务属于比较重要的业务,只对异常的实例进行熔断,避免所有实例被熔断后导致服务雪崩 |
API | 下游目标服务的所有实例的指定 API | 达到熔断触发条件的单个 API | 下游服务不同 API 的重要程度不同,需要根据不同 API 设置不同的熔断策略 |
使用方法
不同于服务限流、路由和鉴权规则在被调服务上设置,服务熔断规则是在主调方服务上设置。
开发指南
目前 TSF 支持 Spring Cloud 应用及 TSF Mesh 应用两种微服务框架的服务熔断。
Spring Cloud 熔断开发指南参考 [开发文档] ,注意 Spring Cloud 应用的服务熔断功能需要使用 1.19.0 版本及以上的 SDK,参考 【SDK 版本更新日志】 。
TSF Mesh 仅需完成控制台熔断规则配置并启用即可实现 TSF Mesh 服务熔断能力,无侵入操作简单。TSF Mesh 迁移开发指引,参考 【TSF Mesh 指南】 。
控制台基本操作
假设用户希望在consumer-demo
上针对下游服务provider-demo
设置一个熔断策略。
新建并启用熔断规则
注意:
一个服务的不同熔断规则的下游目标服务不能重复。
登录 [TSF 控制台] ,在左侧导航栏单击【服务治理】,单击
consumer-demo
服务进入服务详情页。切换至【服务熔断】标签页,单击【新建熔断规则】,在创建熔断规则对话框中填写熔断规则:
下游服务: 选择当前
provider-demo
所在命名空间和服务名。隔离级别:根据业务场景需求设置隔离级别
服务:选择服务隔离级别后,设置熔断策略各参数。
实例:选择实例隔离级别后,设置熔断策略各参数和最大熔断实例比率。
API:选择 API 隔离级别后,可选择不同的 API 设置熔断策略,熔断策略中各参数适用于选中的每个 API。
滑动时间窗口:用于统计熔断器关闭时的请求结果。
最少请求次数:配置熔断器可以计算错误率之前的最小请求数。
触发条件(满足以下任一条件触发熔断):
失败请求率:在滑动时间窗口内统计的失败请求占所有请求比率(失败请求是指响应状态码为4XX和5XX,以及抛出异常的请求)。
慢请求率:在滑动时间窗口内统计的慢响应的请求占所有请求比率,其中「慢响应」的时长支持配置。
开启到半开间隔:熔断器从
open
状态等待一段时间后变为half-open
状态,尝试放行一部分请求到下游服务。最大熔断实例比率:该参数仅适用于实例隔离级别,用于控制最大熔断实例个数百分比,避免下游服务所有实例被熔断导致级联雪崩。例如当下游服务有20个实例且最大熔断实例比率为50%,熔断器最多熔断10个实例。
单击【完成】,跳转至熔断规则列表。
在熔断规则列表上,单击熔断规则的【启用】,启用该规则。