微服务流量控制-网关服务

路由:/managements/flowMonitor

参考Sentinel:http://172.20.32.234:30014/#/login sentinel/sentinel

以网关服务microservices-gateway为例

实时监控

Sentinel 客户端会在本地收集各种与流量控制相关的数据,如请求的计数、异常情况、响应时间等信息。 客户端会周期性地将这些数据上报给 Sentinel 控制台(Dashboard)。默认情况下,客户端每隔一秒向控制台发送一次统计数据。 Sentinel 控制台提供了图形化的界面,可以显示多个维度的数据,包括但不限于各个资源的QPS、异常比例、慢请求比例等。 可以针对特定的资源或整个应用进行监控,通过图表形式展示过去一段时间内的流量趋势。

系统规则

Sentinel系统自适应限流是从整体维度对应用入口流量进行控制,结合应用的load、CPU使用率、总体平均RT、入口QPS和并发线程数等几个维度的监控指标,通过自适应的流控策略,来让系统入口流量和系统负载达到一个平衡,让系统尽可能的在面对高并发访问的同时保证系统整体稳定。

新增系统规则-LOAD

LOAD自适应:针对linux/unix机器有效,系统load(一分钟平均负载)作为启发指标,进行自适应系统保护。

字段 说明
*阈值类型 必填, 该项选择"LOAD"
*阈值 必填, 输入0只1的小数,代表百分比

新增系统规则-RT

RT:单台机器上所有入口流量平均RT达到阈值时,触发系统保护,单位为毫秒。

字段 说明
*阈值类型 必填,该项选择"RT"
*阈值 必填,输入(0,~)的正整数

新增系统规则-线程数

线程数:单台机器上所有入口流量的并发线程数达到阈值触发系统保护。

字段 说明
*阈值类型 必填,该项选择"线程数"
*阈值 必填,输入(0,~)的正整数

新增系统规则-入口QPS

入口QPS:单台机器上所有入口流量的QPS达到阈值触发系统保护。

字段 说明
*阈值类型 必填,该项选择"入口QPS"
*阈值 必填,输入(0,~)的正整数

新增系统规则-CPU使用率

CPU使用率:当系统的CPU使用率超过阈值时触发系统保护(取值范围0.0-1.0)。

字段 说明
*阈值类型 必填,该项选择"CPU使用率"
*阈值 必填,输入0只1的小数,代表百分比

网关服务请求链路

查看网关服务请求链路列表

字段 说明
API类型
API名称
通过QPS
拒绝QPS
线程数
平均RT
分钟通过
分钟拒绝
操作 “流控”“降级”

网关服务API管理

查看网关服务API列表

字段 说明
API名称
匹配模式
匹配串
操作 “编辑”“删除”

新增API分组

字段 说明
*API名称 必填
*匹配模式 必填, 默认“精确”,可选“精确”“前缀”“正则”
*匹配串 必填

网关服务流控规则

流量控制,其原理是监控应用流量的QPS(每秒查询率) 或并发线程数等指标,当达到指定的阈值时 对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。 以网关服务microservices-gateway为例

新增流控规则-QPS

字段 说明
*API类型 必填
*API名称 必填
针对请求属性 选填
属性值匹配 选填
*阈值类型 必填,该项选择“QPS”
*QPS阈值 必填
*间隔 必填
*流控方式 必填,可选“快速失败”“匀速排队”
*超时时间 必填

新增流控规则-并发线程数

字段 说明
*API类型 必填
*API名称 必填
针对请求属性 选填
属性值匹配 选填
*阈值类型 必填,该项选择“并发线程数”
*线程数 必填

新增流控规则-并发线程数

字段 说明
*资源名 必填, 唯一名称,默认是请求路径,可自定义
*针对来源 必填,指定对哪个微服务进行限流,默认指default,意思是不区分来源,全部限制
*阈值类型 必填,该项选择“并发线程数” ;当调用该接口的线程数达到阈值的时候,进行限流
*单机阈值 必填
*熔断策略 必填,可选“直接”“关联”“链路”
*关联资源 必填,当熔断策略=“关联”时,出现该选项
*入口资源 必填,当熔断策略=“链路”时,出现该选项

熔断策略解释

  • 直接 直接模式是 Sentinel 最基本的流控模式,它通过对资源的访问频率进行限制来控制流量。在直接模式下,可以为每个资源配置允许的 QPS(每秒查询率)限制。如果某个资源的实际流量超过了配置的限制,Sentinel 将拒绝或降级该资源的访问请求。 这种模式适用于需要对某个具体资源进行流控的场景,例如 API 接口、微服务等。通过配置直接模式,您可以保护关键资源免受过多请求的干扰,确保系统的稳定性和可用性

  • 关联 关联的资源达到阈值时,就限流自己。假如我们有A和B两个接口,当A关联B接口,同时B接口的资源达到设定的阈值时,限流A。或者也可以理解为,当下游的服务出现访问压力过大时,对上游的服务进行拦截和限流操作。 例如:在电商系统中,当我们订单系统超出承受阈值时,对我们支付模块进行限流。

  • 链路 链路模式:只针对从指定链路访问到本资源的请求做统计,判断是否超过阈值。 比如,在一个服务应用中,多个接口(A和B)都调用了同一个服务中的方法,如果频繁的去请求A接口并且达到设定的阈值,那么我们再去请求B接口,那么调用了同一服务的B接口将会被限流。

流控效果解释

  • 快速失败 快速失败 是 Sentinel 的默认流控效果。当请求达到流控阈值时,新的请求会被立即拒绝,并抛出 FlowException 异常。这意味着请求将立即失败,不会继续执行后续逻辑。这种效果适用于对系统资源有明确限制的场景,帮助尽早识别并拒绝过多请求,以避免系统超负荷运行。 使用快速失败效果可以保护系统免受过多请求的干扰,确保系统的稳定性和可用性。

  • Warm UP Warm UP流量控制,也叫预热或者冷启动方式,会根据我们设定的规则,进行缓慢的流量放开,逐渐增加阈值上线,给系统一个反应时间,避免流量的突然增加,将系统压垮的情况发生。主要用于预防我们系统长期处于稳定的流量访问下,突然流量的增加,将系统资源直接拉满的情况。 预热模式是应对服务冷启动的一种方案。请求阈值初始值是 threshold / coldFactor,持续指定时长后,逐渐提高到threshold值。而coldFactor的默认值是3。 例如,设置QPS的threshold为10,预热时间为 5 秒,那么初始阈值就是 10 / 3 ,也就是 3,然后在 5 秒后从 3 逐渐增长到 10。

  • 排队等待 排队等待会严格控制请求通过的间隔时间,让请求稳定且匀速的通过,可以用来处理间隔性突发的高流量。 例如:抢票软件会在某一秒或者一分钟内有大量的请求到来,而接下来一段时间里处于空闲状态,我们希望系统能够在接下来的空余时间内也能出去这些请求,而不是直接拒绝。 以固定的时间间隔让请求通过,当请求过来时,如果当前请求距离上一个请求通过的时间大于规则预设值,则请求通过;如果当前请求预期通过时间小于规则预设值,则进行排队等待;如果预期通过时间超过最大排队时间,则直接拒绝请求。

网关服务熔断规则

新增熔断规则-慢调用比例

慢调用比例( SLOM_REQUEST_RATTo ):选择以慢调用比例作为阈值,需要设置允许的慢调用RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。 当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。 经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的一个请求响应时间小于设置的慢调用RT则结束熔断,若大于设置的慢调用RT则会再次被熔断。

字段 说明
*资源名 必填,资源名称,通过资源名称找到对应的规则
*熔断策略 必填,该项选择“慢调用比例”
*最大RT 必填,单位毫秒;最大响应时间,指系统对请求作出响应的业务处理时间;
*比例阈值 必填,比例阈值=慢调用次数/调用次数
*熔断时长 必填,单位秒 ;断开时间,时间到了则会发一个请求试探,有用则通,没用则再继续熔断。
*最小请求值 必填,设置的调用最小请求数
*统计时长 必填,单位秒

新增熔断规则-异常比例

当统计时长内请求数大于最小请求数,且异常比例大于设定的阈值,在熔断时间内请求自动熔断,超过熔断时长进入半恢复状态(HALF_OPEN),如果下一个请求成功,结束熔断,否则再次熔断,异常比例阈值范围(0.0-1.0)代表百分比。 异常降级仅仅只针对业务异常,对于sentnel本身的异常不生效。

字段 说明
*资源名 必填,资源名称,通过资源名称找到对应的规则
*熔断策略 必填,该项选择“异常比例”
*比例阈值 必填
*熔断时长 必填,单位秒
*最小请求值 必填
*统计时长 必填,单位秒

新增熔断规则-异常数

当统计时长内异常数大于阈值,自动进行熔断,超过熔断时长进入半恢复状态(HALF_OPEN),如果下一个请求成功,结束熔断,否在再次熔断。

字段 说明
*资源名 必填, 资源名称,通过资源名称找到对应的规则
*熔断策略 必填,该项选择“异常数”
*异常数 必填,单位毫秒
*熔断时长 必填,单位秒
*最小请求值 必填
*统计时长 必填,单位秒