服务熔断

最近更新时间: 2025-01-15 17:01:00

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 应用两种微服务框架的服务熔断。

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

TSF Mesh 仅需完成控制台熔断规则配置并启用即可实现 TSF Mesh 服务熔断能力,无侵入操作简单。TSF Mesh 迁移开发指引,参考 【TSF Mesh 指南】 。

控制台基本操作

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

新建并启用熔断规则

注意:

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

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