有奖:语音产品征文挑战赛等你来> HOT
TSE 治理中心(北极星网格)支持可视化熔断规则管理,支持设置服务、实例、API 三种隔离级别的熔断规则。在常见的熔断器的基础之上,北极星还额外支持故障主动探测

熔断原理

定义

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

熔断器状态

服务熔断中涉及到关键概念熔断器。
1. 主动探测能力关闭的情况下,熔断器的状态转化如下:



1.1 最开始处于closed状态,一旦检测到错误或慢响应等达到一定阈值,便转为open状态,此时不再调用下游目标服务。
1.2 等待一段时间后,会转化为half open状态,尝试放行一部分请求到下游服务。
1.3 一旦检测到响应成功,回归到closed状态,也即恢复服务;否则回到open状态。
其中熔断器从close变为open状态要同时满足以下2个条件:
前提条件:在滑动时间窗口内至少有一定数量的请求(即最少请求数
指标达到阈值:在滑动时间窗口内统计的错误请求率或慢请求率达到一定阈值
2. 打开主动探测能力,断路器的状态流转如下:



在业务请求的同时,加上主动探测的请求。在没有业务请求时,也能及时了解业务运行状态。

隔离级别及场景

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

使用说明

要实现服务熔断需要完成两部分操作:
在控制台上,设置熔断规则、主动探测规则。
客户端接入熔断能力。

步骤1:设置熔断规则

1. 登录 TSE 控制台
2. 在左侧导航栏,点击 服务治理中心 > 流量管理,进入流量管理页面。
3. 在页面上方选择 熔断降级 页签,选择熔断级别。
4. 单击新建熔断规则。



规则名称:规则名,需全局唯一。
描述:规则的描述信息,用于补充规则的说明。
匹配条件主要用于决定熔断规则的适用范围,客户端根据匹配条件来过滤本地调用所适用的熔断规则。
主调服务:配置作为主调方的服务名和命名空间,可选。不配置则默认对所有的主调生效。
被调服务:配置被调的服务名和命名空间,可选。不配置则默认对所有的被调生效。
被调接口:配置被调的接口名,表明该熔断规则只对调用某个接口的请求生效,可选。接口名支持多种匹配条件。
错误判断条件:可配置多个判断条件,满足任意一个条件的请求会被标识为错误请求。支持返回码时延2种判断方式。
熔断触发条件:可配置多个触发条件,满足任意一个条件即会触发熔断,资源会进入熔断状态。支持连续错误数错误率2种触发条件。
连续错误数:统计调用该服务/接口的请求连续错误数,达到阈值即触发熔断。
错误率:统计在周期内调用该服务/接口的请求的错误率,达到阈值即触发熔断。同时为避免少流量下的放大效应,可配置错误率统计的起始请求阈值,请求数超过阈值才进行熔断判断。
熔断恢复:资源触发熔断后,会熔断请求调度到该资源一段时间。随后系统会对资源进行恢复尝试,当满足一定次数的连续成功请求数后,资源会恢复正常状态。用户可配置资源熔断时长(单位秒),以及连续成功请求数。
可选择开启主动探测。开启后,主调方会根据被调服务/接口所关联的探测规则,向被调方发起探测,探测结果会与业务调用合并,作为熔断触发或恢复的依据之一。开启主动探测后需配置主动探测规则。

步骤2:设置主动探测规则(可选)

1. 登录 TSE 控制台
2. 在左侧导航栏,点击 服务治理中心 > 流量管理,进入流量管理页面。
3. 在页面上方选择 熔断降级 页签,选择主动探测Tab。
4. 单击新建主动探测规则。



规则名称:必选。规则名,需全局唯一。
描述:可选。规则的描述信息,用于补充规则的说明。
命名空间:必选。被调服务的命名空间。
服务名称:必选。被调服务的名称。
接口名称:可选。被调接口的名称,支持多种匹配条件。
周期:可选。探测周期,多久执行一次探测,默认30秒。
超时时间:可选,探测最大超时时间,超时未响应则以最大超时时间作为熔断依据。默认60秒。
端口:可选,探测端口,默认为服务实例端口。
协议:使用什么协议进行探测,会影响接下来的配置,支持HTTP, TCP, UDP 3种协议。
HTTP协议配置:
方法:HTTP方法,默认Get。
Url:探测Url,默认/。
Headers:发送探测包所需的消息头,默认空。
TCP协议配置:TCP默认会采用 tcp connect 的方式进行探测,用户也可以配置基于报文的探测手段。
Send:配置所需发送的TCP二进制报文,格式为0x开头的十六进制字符串,如:0x12ab。
Receive:配置所接收的TCP二进制报文,可配置多个,不配置则不校验应答。
UDP协议配置:UDP没有连接检测的方式,只能通过基于报文的探测手段。
Send:配置所需发送的UDP二进制报文,格式为0x开头的十六进制字符串,如:0x12ab。
Receive:配置所接收的UDP二进制报文,可配置多个。

步骤3:客户端接入熔断能力

根据您对应的接入方式查看开发文档下熔断降级相关的篇章,以使用 Spring Cloud 接入为例,可参见文档 Spring Cloud 应用开发 > 服务熔断