在影响系统稳定性的各种因素中,慢 SQL 是相对比较致命的,可能会导致 CPU、LOAD 异常、系统资源耗尽。线上生产环境出现慢 SQL 往往有很多原因:
AHAS 提供了丰富的 SQL 场景支持,不需要更改代码即可实现SQL识别与防护,包括:
AHAS 流控降级通过自动检测常见的 DAO 类、JDBC 驱动类等自动识别应用中的 SQL 语句,用户可以通过 Java Agent或者 JAVA SDK 两种接入方式来实现 SQL 的监控和拦截。其中 Java Agent 目前支持 MySQL JDBC 和 Oracle JDBC 驱动,SDK 目前支持 MyBatis 框架下的 SQL 识别。第三方组件和框架的版本支持情况详见 支持列表。
如果使用Agent接入只需下载并安装最新的Agent即可:
SDK接入需要在应用依赖中引入ahas-sentinel-client:
接入成功后就可以在AHAS控制台的监控页看到SQL资源调用的QPS以及RT等信息,用户可以在监控页面通过查看SQL对应的RT值来判断该SQL执行是否过慢,从而提前设置限流和降级规则进行多手段防护。对于SQL的常见防护规则我们会在慢SQL防护中详细说明。
AHAS 流控降级提供了多种不同的防护手段,对于线上出现慢SQL的情况,可以从限流和降级两方面来对系统进行防护。规则配置开启后立即生效,不仅能够提前设置防护,还能在线上出现问题时紧急处理避免因为大量慢SQL的调用把系统拖垮。
基于控制台自动识别出的SQL语句,使用者可以配置相应的限流规则对SQL执行进行控制。AHAS支持对QPS和并发线程数两种维度进行限制,SQL控制一般采取并发线程数模式,当出现慢SQL调用时可以限制同一时刻执行的SQL数量,防止过多的慢SQL语句执行把资源耗尽。
流控模式
AHAS 提供了多种不同的流控模式,用户可以基于自身业务场景来选择使用,在慢SQL防护中,比较常用的有直接和关联两种模式:
1、直接模式。
最常用的一种流控模式,在该模式下,阈值配置为当前SQL资源,超过设置的值后多余的请求将被拒绝。
2、关联模式。
阈值配置为关联SQL资源,关联的资源请求超过设置的之后,该资源的调用将被拦截。可以根据需要将SQL读关联写资源。
除了限流规则之外,AHAS还提供了基于RT和异常比例的降级策略。对于慢SQL防护,使用者可以根据SQL执行的RT设置对应的阈值以及时间窗口,超过指定的RT值后在时间窗口内 SQL 执行将被降级,抛出包装好的异常。
资源被流控降级后会抛出 BlockException 异常类的子类(限流会抛流控异常 FlowException,降级会抛出降级异常 DegradeException),开发人员可以自定义异常的业务处理,如重试等一系列操作。
AHAS提供了强大的监控功能来帮助使用者快速发现问题并及时处理。在应用概览页可以查看集群的总QPS、拒绝QPS、RT等信息:
同时可以查看集群、单机TOP的CPU、LOAD信息,并支持历史数据回放:
除此之外还能够很直观的看到不同 SQL 语句执行的 TOP 情况,包括请求 QPS TOP、拒绝 QPS TOP、RT TOP,以及对应的单机 TOP 数据:
在监控详情页,可以查看每条 SQL 语句的调用及执行情况,发现 RT 请求过长的 SQL 调用可以进行一键限流或降级:
上述就是 AHAS 流控降级所提供的基于慢 SQL 的防护手段,通过 监控->发现异常->配置规则->有效防护 保障应用的高可用服务能力。
本文作者:中间件小哥
本文为云栖社区原创内容,未经允许不得转载。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69915408/viewspace-2655266/ ,如需转载,请注明出处,否则将追究法律责任。