使用熔断保护后端

最近更新时间:2024-01-19 11:56:21

我的收藏

操作场景

本文介绍如何在 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次请求正常后关闭熔断。