系统防护提供了在不同场景下的节点维度的流量防护能力,以应对各种预期外的情况。例如,当未配置流量防护规则的接口遭遇流量突增时,系统防护能够提供兜底的流量防护,确保应用的稳定性。目前,微服务治理针对服务端流量以及客户端流量分别提供了自适应过载保护、总QPS限流、总并发限流、异常调用熔断以及慢调用熔断能力。
系统防护与流量防护的关系可参见系统防护与流量防护的关系。
前提条件
应用接入微服务治理中心。具体操作,请参见ACK微服务应用接入MSE治理中心、ECS微服务应用接入MSE治理中心。
功能入口
登录MSE治理中心控制台,并在顶部菜单栏选择地域。
在左侧导航栏,选择治理中心 > 应用治理。
在应用列表页面,单击目标应用的资源卡片,然后在左侧导航栏单击流量治理。
单击系统防护页签,配置相应的功能。
自适应过载保护
自适应过载保护需要Agent版本为3.1.4及以上。
简介
自适应过载保护将CPU使用率作为衡量系统负载的依据,自适应地调整对服务端流量的限流比例,在预期外的流量突增场景下也能将CPU使用率相对平稳地控制在配置的阈值范围内。
生效范围
自适应过载保护对所有服务端接口生效,优先级低于流量防护规则。
适用场景
自适应过载保护为服务端接口提供基于CPU的兜底防护,适用于CPU相关型应用,预期外的接口出现突增 -> 系统CPU持续上升 -> 影响核心接口RT。
根据不同应用的业务,稳态下的CPU使用率也不同,用户可以通过压测/历史数据确定稳态下的最大CPU使用率并进行适当放大做为阈值进行配置。
页面说明
页面左侧为自适应过载保护事件列表,右侧展示近5分钟该应用的节点平均CPU使用率变化趋势。
事件为节点维度,基于算法的状态变更,包含限流开始事件、限流持续事件以及限流结束事件。
单击事件操作的查看链接,可以查询对应IP节点的CPU使用率数据,并将时间回放至事件上报时间,以观察事件触发时对应节点的CPU使用率以及限流概率等信息。
配置项 | 描述 |
开启状态 |
|
CPU使用率 | 定义预期的CPU使用率阈值,自适应过载保护会基于系统实际的CPU使用率以及配置的CPU使用率阈值结合算法自适应地调整接口限流的概率,帮助系统在高压场景下通过拒绝一部分请求的方式,维持CPU使用率在配置的阈值上下小范围波动。 |
例外设置 | 详见例外项配置。 |
总QPS限流
简介
总QPS限流将以节点维度统计总QPS(单节点所有服务端接口QPS之和),对于超过阈值的请求进行限流操作。
总QPS限流需要Agent版本为4.2.0及以上。
生效范围
总QPS限流对所有服务端接口生效,优先级低于流量防护规则。
适用场景
由于不是所有系统的表现都与CPU强相关,有些应用在低CPU负载下也会因为内存、网络等原因导致性能劣化。而总QPS限流基于节点的总QPS来进行限流,提供了基于流量的防护手段。
预期外的接口出现突增 -> 竞争资源紧缺 -> 影响核心接口。
用户可以通过压测/历史数据确定稳态下的节点总QPS并进行适当放大作为阈值进行配置。
页面说明
页面左侧为总QPS限流事件,右侧展示近5分钟该应用的节点平均总QPS请求数据变化趋势。
事件为节点和接口维度,基于实际发生总QPS限流的节点以及接口上报事件,每5分钟上报一次,上报过去5分钟内发生的限流。
单击事件的查看链接,可以查询对应IP节点的总QPS,并将时间回放至事件上报时间附近,以观察事件触发时对应节点的总QPS以及限流是否符合预期,如果需要查看更加详细的信息,比如接口和节点维度,可以前往接口详情或者节点详情,后续会提供对应的跳转能力。
配置项 | 描述 |
开启状态 |
|
总QPS阈值 | 节点维度总QPS阈值。 |
例外设置 | 详见例外项配置。 |
总并发限流
简介
总并发限流将以节点维度统计总并发(单节点所有服务端接口并发之和),对于超过阈值的请求进行限流操作。
总并发限流需要Agent版本为4.2.0及以上。
生效范围
总并发限流对所有服务端接口生效,优先级低于流量防护规则。
适用场景
在调用RT较高的场景下(普遍超过1s),QPS限流会出现一个比较明显的问题,当系统的竞争资源(线程池、内存、连接池等)被占用时,会导致排队进一步导致接口的RT上升,如果此时只采用基于QPS的限流,每秒还是会有少量请求进入,而队列中的请求无法在秒级别消化完成,会导致队列进一步累积,RT进一步上升,无论新旧请求RT都有显著上升。此时如果使用了并发限流,如果还有一定量的请求没有完成,新的请求会被直接拒绝,这样虽然请求会被限流,但是系统处理完当前请求后,新的请求就会通过,以较小的排队时间完成请求。从整体上看,请求的成功率和平均RT都会有显著的改善。
预期外的接口出现突增 -> 竞争资源紧缺 -> 队列堆积 -> 所有请求RT上升。
用户可以通过压测/历史数据确定稳态下的节点总并发并进行适当放大作为阈值进行配置。
页面说明
页面左侧为总并发限流事件,右侧展示近5分钟该应用的节点平均总并发请求数据变化趋势,
事件为节点+接口维度,基于实际发生总并发限流的节点以及接口上报事件,每5分钟上报一次,上报过去5分钟内发生的限流。
单击事件的查看链接,可以查询对应IP节点的总并发,并将时间回放至事件上报时间附近,以观察事件触发时对应节点的总并发以及限流是否符合预期,如果需要查看更加详细的信息,比如接口和节点维度,可以前往接口详情或者节点详情,后续会提供对应的跳转能力。
配置项 | 描述 |
开启状态 |
|
总并发阈值 | 节点维度总并发阈值。 |
例外设置 | 详见例外项配置。 |
异常调用熔断
简介
异常调用熔断会分别统计每个客户端接口的异常比例,当异常比例大于配置的阈值时对该接口进行熔断,熔断期间该接口直接快速失败,并相隔一定时间通过用于探测的请求,探测成功后结束熔断。
异常调用熔断需要Agent版本为4.2.0及以上。
生效范围
异常调用熔断对所有客户端接口生效,但对于配置了接口维度熔断规则的接口不生效。
适用场景
异常调用熔断主要分为两类场景。
超时场景:一个客户端接口的超时异常比例过高,往往是服务提供方出现异常情况,但这会进一步导致调用方(本应用)请求堆积,影响本应用的其他接口,通过熔断的方式可以在提供方异常期间快速失败,避免堆积。
非超时场景:一个客户端接口的非超时异常比例过高,异常调用熔断能够通过抛出限流异常供用户处理,起到降级的效果,优化异常场景下的用户体验。
页面说明
页面左侧为异常调用熔断事件,右侧展示近5分钟该应用的TOP10异常比例接口,
事件为节点+接口维度,基于实际发生异常调用熔断的节点以及接口上报事件,每5分钟上报一次,上报过去5分钟内发生的限流。
配置项 | 描述 |
开启状态 |
|
熔断比例阈值(%) | 接口维度熔断比例阈值。 |
例外设置 | 详见例外项配置。 |
高级配置 | |
统计窗口时长(秒) | 统计的时间窗口长度,取值范围为1秒~120分钟。 |
熔断时长(s) | 即熔断触发后持续的时间。资源进入熔断状态后,在配置的熔断时长内,请求都会快速失败。 |
最小请求数目 | 触发熔断的最小请求数目,若当前统计窗口内的请求数小于此值,即使达到熔断条件规则也不会触发。 |
熔断恢复策略 | 熔断器进入恢复阶段(半开启状态)的恢复策略。
|
慢调用熔断
简介
慢调用熔断会分别统计每个客户端接口的慢调用比例,当慢调用比例大于配置的阈值时对该接口进行熔断,熔断期间该接口直接快速失败,并相隔一定时间通过用于探测的请求,探测成功后结束熔断。
慢调用熔断需要Agent版本为4.2.0及以上。
生效范围
慢调用熔断对所有客户端接口生效,但对于配置了接口维度熔断规则的接口不生效。
适用场景
慢调用熔断的使用场景基本和异常调用熔断中的超时异常相同,区别在于可以动态调整判断慢调用的RT标准,不依赖超时配置。
页面说明
页面左侧为慢调用熔断事件,右侧展示近5分钟该应用的TOP10平均RT,
事件为节点和接口维度,基于实际发生异常调用熔断的节点以及接口上报事件,每5分钟上报一次,上报过去5分钟内发生的限流情况。
配置项 | 描述 |
开启状态 |
|
慢调用RT (ms) | 超过该值的请求会被判定为慢调用。 |
降级阈值 (%) | 当有超过该百分比阈值的请求RT长于上述慢调用RT,则触发熔断。 |
例外设置 | 详见例外项配置。 |
高级配置 | |
统计窗口时长(秒) | 统计的时间窗口长度,取值范围为1秒~120分钟。 |
熔断时长(s) | 即熔断触发后持续的时间。资源进入熔断状态后,在配置的熔断时长内,请求都会快速失败。 |
最小请求数目 | 触发熔断的最小请求数目,若当前统计窗口内的请求数小于此值,即使达到熔断条件规则也不会触发。 |
熔断恢复策略 | 熔断器进入恢复阶段(半开启状态)的恢复策略。
|
例外项
简介
所有系统防护功能均可以配置例外项,对例外项中的接口系统防护会直接通过,而不进行规则的检查。
例外项需要Agent版本为4.2.0及以上。
适用场景
通常情况下,只有健康检查接口以及系统关键接口需要配置例外项,前者避免影响节点的健康状态,后者有单独的接口维度的限流限制,且希望不受系统维度限流的影响。
页面说明
左侧为可供直接选择的接口(近期有调用的接口),对于未展示在左侧的接口可以直接在输入框处输入后回车添加到已选接口中。
常见问题
系统防护与流量防护的关系
系统防护和流量防护都能够保障应用处于稳态,但是两者覆盖的场景和流量损耗不同。
系统防护以节点维度的指标为依据提供流量防护,能够保障应用本身处于稳态,覆盖大部分场景。但是由于系统防护从应用视角出发,对所有接口一视同仁,但在同一个应用中,不同接口的重要性不同,对系统负载的影响也不同。流量防护可以通过对不同接口配置不同的阈值,从而覆盖更多的场景,并且在同样起到防护作用的同时尽可能较少限流的流量。
整体来说系统防护和流量防护都能够起到防护效果,但是在防护场景覆盖率和流量损耗上流量防护效果更好,在配置难度上系统防护更低。因此,最佳实践是系统防护+流量防护,系统防护保障应用的稳定性,流量防护通过精细化的配置在防护效果不打折扣的同时减少损耗(限流的流量)。
相关文档
更多流量防护策略,请参见流量防护。