操作场景
本文介绍如何在 Kong 云原生 API 网关上通过 Kong 熔断插件实现下述常见熔断场景:
根据后端响应时间进行熔断。
根据错误码进行熔断。
前置条件
已购买 Kong 网关实例,详情请参见 实例管理。
配置了后端(Service)以及路由(Route)。
插件说明
插件名称:TSE BREAKER
分类:Traffic Control
概述:实现对客户端的请求进行熔断,从而保护上游业务服务。
具体能力:
1.1 支持响应时间模式和错误码模式。针对不同模式配置熔断开启条件,错误条件支持响应时间模式和错误码模式。
a. 响应时间模式:需配置后端服务响应时间阈值,超出响应时间阈值为一次错误,到达熔断开启条件触发熔断。
b. 错误码模式:需配置异常状态 HTTP 状态码,状态码使用英文逗号隔开,请求返回异常状态码为一次错误,到达熔断开启条件触发熔断。
1.2 支持熔断后半开探测:第一次触发熔断,熔断2s,超过时间后,重新转发后端,进行错误条件和健康条件判断。
a. 满足错误条件时,熔断4s,以此类推,直到达到预设的最大探测等待时间,停止指数递增。
b. 满足健康条件(即正常状态达到连续正常请求次数)时,结束熔断。
1.3 支持自定义熔断返回:可自定义配置熔断状态 HTTP 状态码、熔断状态 HTTP 响应内容、熔断状态响应头。
插件配置
字段名称 | 是否必填 | 字段说明 |
响应时间阈值 | 否 | >=1。上游服务后端最大响应时间,单位为秒。 |
异常状态 HTTP 状态码 | 否 | 默认503,支持[500,……599]。上游服务处于异常状态时返回的 HTTP 状态码范围。 |
错误率阈值 | 否 | 上游服务在一定时间内触发异常状态的请求次数比例阈值。 |
连续错误数阈值 | 否 | >=1,上游服务连续触发异常状态的请求次数阈值。 |
最大探测等待时间 | 否 | >=3,最大 300,单位秒,上游服务熔断的最大持续时间。 |
连续正常请求次数 | 是 | >=1,上游服务处于健康状态时的连续正常请求次数。 |
熔断状态 HTTP 状态码 | 否 | 当上游服务处于不健康状态时返回的 HTTP 错误码。 |
熔断状态 HTTP 响应内容 | 否 | 当上游服务处于不健康状态时返回的 HTTP 响应体信息。 |
熔断状态响应头 | 否 | 当上游服务处于不健康状态时返回的 HTTP 响应头信息。该字段仅在配置了 break_response_body 属性时生效。 |
使用场景与操作步骤
场景一:根据错误码进行熔断
1. 登录 Konga 管理控制台,进入需要配置熔断的 Service 详情页,单击 Add Plugin 添加插件,在 Traffic Control 分组下选择 TSE BREAKER 插件。
2. 本场景模拟当后端服务返回500,501,502时认为后端异常,连续3次请求错误时触发熔断,熔断返回自定义内容。
在插件中填写以下配置:
错误判断条件:后端服务返回500,501,502。
熔断开启条件:连续错误数超过3次。
熔断响应配置(可选)。
状态码:503
响应头:example-resp-header:kong-cb
响应内容:Service is broken
3. 发起API请求,查看在三次返回500后熔断成功,返回自定义熔断响应。
HTTP/1.1 503 Service Unavailable //自定义响应状态码Example-Resp-Header: kong-cb //自定义响应头Service is broken //自定义响应内容
场景二:根据响应时间进行熔断
1. 登录 Konga 管理控制台,进入需要配置熔断的 Service 详情页,单击 Add Plugin 添加插件,在 Traffic Control 分组下选择 TSE BREAKER 插件。
2. 本场景模拟当后端服务响应超过15秒时认为后端异常,连续4次请求错误时触发熔断,请求连续正确2次即关闭熔断。
在插件中填写以下配置:
错误判断条件:后端服务响应时间超过15秒
熔断开启条件:连续错误数超过4次
熔断响应配置(可选)
状态码:503
响应头:example-resp-header:kong-cb
响应内容:Service is broken
熔断关闭条件:连续正常请求达到2次
3. 发起 API 请求,查看在4次请求超时后熔断成功,2次请求正常后关闭熔断。