服务熔断

更新时间:

当服务中的服务端接口不稳定,出现频繁超时或错误时,可能会引起服务调用雪崩。您可以对应用开启服务熔断功能,使有故障的服务端及时返回错误,并释放系统资源,提高用户体验和系统性能。

功能简介

您可以通过下述操作让故障处于可控范围:

  • 通过监控或者服务拓扑查看到某个服务延时较大、错误率较多后,进行服务治理。

  • 选择异常服务后,进行自动熔断设置,可自定义熔断条件,例如:在某个时间段内(例如 10s)请求数达到某个值,且错误率或者延时达到某个值。

满足条件,则可以触发熔断。服务熔断后还可以持续测试该服务,进行自动熔断恢复。服务熔断的规则发布流程如下:服务熔断.png

  1. 通过微服务管控台 MS 下发熔断的动态配置到分布式配置中心 DRM。

  2. DRM 将熔断的动态配置下发到 MOSN。

  3. MOSN 根据平均 RT 和错误率触发熔断。

    熔断可在客户端或服务端生效。

创建熔断规则

  1. 登录 SOFAStack 控制台

  2. 在左侧菜单栏选择 中间件 > 微服务平台 > 服务网格 > 服务治理,然后单击 服务熔断 页签

  3. 单击 添加熔断规则,然后配置以下参数:

    参数

    说明

    规则名称

    配置服务熔断规则的名称。

    支持中文、英文、数字、下划线。

    应用

    配置检测的目标应用。

    您可以手动填写或在下拉列表中选择。

    熔断方向

    配置服务熔断的方向,取值如下:

    • 客户端熔断:表示熔断规则在客户端生效。在客户端侧统计调用服务端的请求指标,应用填写客户端的应用,服务和方法填写引用的服务端的服务和方法。

    • 服务端熔断:表示熔断规则在服务端生效,每个服务端单独统计请求指标,应用填写服务端的应用,服务和方法填写服务端的服务和方法。

    熔断服务

    配置熔断的服务。单击 切换输入模式 可在手动填写与下拉选择之间切换。

    方法

    配置需要熔断的服务的方法名。

    熔断类型

    配置熔断的类型,取值如下:

    • 错误比率:熔断时间窗口内的请求错误率大于错误率阈值时,触发熔断。

    • 平均 RT:熔断时间窗口内的请求数阈值大于平均 RT 阈值时,触发熔断。

    运行模式

    配置熔断的运行模式,取值如下:

    • 拦截模式:满足条件的请求会触发熔断规则。

    • 观察者模式:熔断规则不会被触发,只会在 MOSN 里打印日志。

    熔断配置

    配置触发熔断的各项参数:

    • 熔断指标窗口:和请求数阈值搭配使用,表示熔断指标窗口内至少有请求数阈值的请求就会纳入熔断指标统计。单位为秒。

    • 请求数阈值:和熔断指标窗口搭配使用。单位为个。

    • 错误率阈值:请求数的平均错误率达到此阈值时触发熔断。熔断类型配置为 错误比率 时配置。

    • 平均 RT 阈值:请求响应时间超过此阈值时触发熔断。单位为毫秒。熔断类型配置为 平均 RT 时配置。

    • 熔断时间段:触发熔断后的熔断时长,熔断时长之内的请求会直接返回错误。当熔断超过该时间后会再次尝试调用服务端,如果还是失败则继续触发熔断。

    • RPC 超时时间:经典微服务场景会使用。单位为毫秒。熔断类型配置为 错误比率 时配置。

    流量精确匹配(可选)

    配置之后,只有满足匹配条件的流量才会使用这份熔断规则。置空表示匹配所有流量。

    您可以配置多条匹配条件,多个条件是与的关系,按顺序进行匹配。参数配置如下:

    • 字段:可选择系统字段和请求头。

    • 字段名:根据字段类型有不同的值。

      • 系统字段:包括流量类型、调用方应用名、调用方 IP、服务方应用名。

      • 请求头:请求头是指协议的请求头,比如 Dubbo 协议取的是 attachment,HTTP 协议取的是 Request Header。用户可以在应用系统中自定义请求头参数和值。

    • 选择逻辑:包括等于、不等于、属于、不属于、正则。

    • 字段值:字段名对应的值。

  4. 单击 提交,然后单击 确定

  5. 在熔断规则列表中,将刚刚创建的熔断规则的状态改为

验证熔断规则

要验证服务熔断,需要在服务端侧设置接口的抛错或者超时。您可以在服务端 MOSN 容器中执行以下命令:

  • 错误比率

    kubectl exec -it dubbo-echo-server-v1-6c558677d9-fzdmz -c mosn-sidecar-container bash
    
    curl localhost:8080/status/set?throwException=true&sleep=0
    ## 或者 curl localhost:8080/status/set?throwException=false&sleep=2000
    Image 2
  • 平均 RT 熔断

    kubectl exec -it dubbo-echo-server-v1-6c558677d9-fzdmz -c mosn-sidecar-container bash
    curl localhost:8080/status/set?throwException=false&sleep=500

    进入客户端容器,多次调用客户端接口:

    kubectl exec -it dubbo-echo-client-547c6f65f5-sthcb -c mosn-sidecar-container bash
    
    ## 访问 8082 端口的 hi 接口
    curl localhost:8082/hi?count=10
    Image 3

编辑熔断规则

您可以随时编辑已创建的熔断规则,规则提交后会实时生效。

  1. 服务熔断 页签,单击目标熔断规则右侧的 编辑

  2. 按需求编辑熔断规则后,单击 提交

删除熔断规则

您可以删除已创建的熔断规则,删除操作会实时生效,请谨慎操作。

  1. 服务熔断 页签,单击目标熔断规则右侧的 删除

  2. 单击 确定