在影响系统稳定性的各类因素中,慢 SQL 是相对比较致命的,可能会致使 CPU、LOAD 异常、系统资源耗尽。线上生产环境出现慢 SQL 每每有不少缘由:html
AHAS 提供了丰富的 SQL 场景支持,不须要更改代码便可实现SQL识别与防御,包括:数据库
AHAS 流控降级经过自动检测常见的 DAO 类、JDBC 驱动类等自动识别应用中的 SQL 语句,用户能够经过 Java Agent或者 JAVA SDK 两种接入方式来实现 SQL 的监控和拦截。其中 Java Agent 目前支持 MySQL JDBC 和 Oracle JDBC 驱动,SDK 目前支持 MyBatis 框架下的 SQL 识别。第三方组件和框架的版本支持状况详见支持列表。网络
若是使用Agent接入只需下载并安装最新的Agent便可:并发
wget -O ./install_agent.sh https://ahasoss-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/agent/prod/latest/install_agent.sh && source ./install_agent.sh {YourAppName} default
SDK接入须要在应用依赖中引入ahas-sentinel-client:框架
<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>ahas-sentinel-client</artifactId> <version>x.y.z</version> </dependency>
接入成功后就能够在AHAS控制台的监控页看到SQL资源调用的QPS以及RT等信息,用户能够在监控页面经过查看SQL对应的RT值来判断该SQL执行是否过慢,从而提早设置限流和降级规则进行多手段防御。对于SQL的常见防御规则咱们会在慢SQL防御中详细说明。运维
AHAS 流控降级提供了多种不一样的防御手段,对于线上出现慢SQL的状况,能够从限流和降级两方面来对系统进行防御。规则配置开启后当即生效,不只可以提早设置防御,还能在线上出现问题时紧急处理避免由于大量慢SQL的调用把系统拖垮。性能
基于控制台自动识别出的SQL语句,使用者能够配置相应的限流规则对SQL执行进行控制。AHAS支持对QPS和并发线程数两种维度进行限制,SQL控制通常采起并发线程数模式,当出现慢SQL调用时能够限制同一时刻执行的SQL数量,防止过多的慢SQL语句执行把资源耗尽。
流控模式
AHAS 提供了多种不一样的流控模式,用户能够基于自身业务场景来选择使用,在慢SQL防御中,比较经常使用的有直接和关联两种模式:
一、直接模式。
最经常使用的一种流控模式,在该模式下,阈值配置为当前SQL资源,超过设置的值后多余的请求将被拒绝。url
二、关联模式。
阈值配置为关联SQL资源,关联的资源请求超过设置的以后,该资源的调用将被拦截。能够根据须要将SQL读关联写资源。spa
除了限流规则以外,AHAS还提供了基于RT和异常比例的降级策略。对于慢SQL防御,使用者能够根据SQL执行的RT设置对应的阈值以及时间窗口,超过指定的RT值后在时间窗口内 SQL 执行将被降级,抛出包装好的异常。线程
资源被流控降级后会抛出 BlockException 异常类的子类(限流会抛流控异常 FlowException,降级会抛出降级异常 DegradeException),开发人员能够自定义异常的业务处理,如重试等一系列操做。
AHAS提供了强大的监控功能来帮助使用者快速发现问题并及时处理。在应用概览页能够查看集群的总QPS、拒绝QPS、RT等信息:
除此以外还可以很直观的看到不一样 SQL 语句执行的 TOP 状况,包括请求 QPS TOP、拒绝 QPS TOP、RT TOP,以及对应的单机 TOP 数据:
在监控详情页,能够查看每条 SQL 语句的调用及执行状况,发现 RT 请求过长的 SQL 调用能够进行一键限流或降级:
上述就是 AHAS 流控降级所提供的基于慢 SQL 的防御手段,经过 监控->发现异常->配置规则->有效防御 保障应用的高可用服务能力。
原文连接 本文为云栖社区原创内容,未经容许不得转载。