阿里云应用高可用服务 AHAS 流控降级实现 SQL 自动防护功能

简介: 在影响系统稳定性的各种因素中,慢 SQL 是相对比较致命的,可能会导致 CPU、LOAD 异常、系统资源耗尽。线上生产环境出现慢 SQL 往往有很多原因: 硬件问题。如网络速度慢,内存不足,I/O 吞吐量小,磁盘空间满等。

在影响系统稳定性的各种因素中,慢 SQL 是相对比较致命的,可能会导致 CPU、LOAD 异常、系统资源耗尽。线上生产环境出现慢 SQL 往往有很多原因:

  • 硬件问题。如网络速度慢,内存不足,I/O 吞吐量小,磁盘空间满等。
  • 没有索引或者索引失效。
  • 数据过多。
  • DevOps 后没有专业的 DBA 对 SQL 代码进行 review,在项目初期没有对 SQL 的性能做很好的考量。
    严重的慢 SQL 发生后可能会拖垮整个数据库,对线上业务产生阻断性的风险。AHAS 流控降级提供了 SQL 级别的识别与防护,可以帮助开发以及运维同学快速的识别慢 SQL 并及时采取有效的防护措施保障系统的稳定性。

AHAS产品地址

SQL自动防护功能文档地址

应用场景

AHAS 提供了丰富的 SQL 场景支持,不需要更改代码即可实现SQL识别与防护,包括:

  • 根据 SQL 语句的调用频率、执行时间来进行控制,如直接拒绝或者排队等待等。
  • 自动探测 SQL 的执行时间、频率,并进行控制。
  • 数据库读写联动控制,例如,读操作的速度由写操作的速度决定。
  • SQL 执行并发控制。
    在慢 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防护中详细说明。

慢SQL防护

AHAS 流控降级提供了多种不同的防护手段,对于线上出现慢SQL的情况,可以从限流和降级两方面来对系统进行防护。规则配置开启后立即生效,不仅能够提前设置防护,还能在线上出现问题时紧急处理避免因为大量慢SQL的调用把系统拖垮。

限流策略

基于控制台自动识别出的SQL语句,使用者可以配置相应的限流规则对SQL执行进行控制。AHAS支持对QPS和并发线程数两种维度进行限制,SQL控制一般采取并发线程数模式,当出现慢SQL调用时可以限制同一时刻执行的SQL数量,防止过多的慢SQL语句执行把资源耗尽。
流控模式
AHAS 提供了多种不同的流控模式,用户可以基于自身业务场景来选择使用,在慢SQL防护中,比较常用的有直接和关联两种模式:
1、直接模式。
最常用的一种流控模式,在该模式下,阈值配置为当前SQL资源,超过设置的值后多余的请求将被拒绝。
001

2、关联模式。
阈值配置为关联SQL资源,关联的资源请求超过设置的之后,该资源的调用将被拦截。可以根据需要将SQL读关联写资源。
002

降级策略

除了限流规则之外,AHAS还提供了基于RT和异常比例的降级策略。对于慢SQL防护,使用者可以根据SQL执行的RT设置对应的阈值以及时间窗口,超过指定的RT值后在时间窗口内 SQL 执行将被降级,抛出包装好的异常。
003

资源被流控降级后会抛出 BlockException 异常类的子类(限流会抛流控异常 FlowException,降级会抛出降级异常 DegradeException),开发人员可以自定义异常的业务处理,如重试等一系列操作。

强大的监控

AHAS提供了强大的监控功能来帮助使用者快速发现问题并及时处理。在应用概览页可以查看集群的总QPS、拒绝QPS、RT等信息:
004
同时可以查看集群、单机TOP的CPU、LOAD信息,并支持历史数据回放:
005

除此之外还能够很直观的看到不同 SQL 语句执行的 TOP 情况,包括请求 QPS TOP、拒绝 QPS TOP、RT TOP,以及对应的单机 TOP 数据:
007

在监控详情页,可以查看每条 SQL 语句的调用及执行情况,发现 RT 请求过长的 SQL 调用可以进行一键限流或降级:
008

上述就是 AHAS 流控降级所提供的基于慢 SQL 的防护手段,通过 监控->发现异常->配置规则->有效防护 保障应用的高可用服务能力。

相关文章
|
7月前
|
SQL
SQL如何在CTE中使用Order By的功能
SQL Server如何在CTE中使用Order By的功能
|
11月前
|
SQL 分布式计算 资源调度
Dataphin功能Tips系列(48)-如何根据Hive SQL/Spark SQL的任务优先级指定YARN资源队列
如何根据Hive SQL/Spark SQL的任务优先级指定YARN资源队列
423 4
|
11月前
|
SQL 容灾 关系型数据库
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍
SQL Server 以其卓越的易用性和丰富的软件生态系统,在数据库行业中占据了显著的市场份额。作为一款商业数据库,外部厂商在通过解析原生日志实现增量数据捕获上面临很大的挑战,DTS 在 SQL Sever 数据通道上深研多年,提供了多种模式以实现 SQL Server 增量数据捕获。用户可以通过 DTS 数据传输服务,一键打破自建 SQL Server、RDS SQL Server、Azure、AWS等他云 SQL Server 数据孤岛,实现 SQL Server 数据源的流动。
681 0
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍
|
SQL 数据库 开发者
ClkLog埋点分析系统支持自定义SQL 查询
本期主要为大家介绍ClkLog九月上线的新功能-自定义SQL查询。
ClkLog埋点分析系统支持自定义SQL 查询
|
SQL 关系型数据库 MySQL
SQL中,可以使用 `ORDER BY` 子句来实现排序功能
【10月更文挑战第26天】SQL中,可以使用 `ORDER BY` 子句来实现排序功能
1511 6
|
SQL 机器学习/深度学习 自然语言处理
Text-to-SQL技术演进 - 阿里云OpenSearch-SQL在BIRD榜单夺冠方法剖析
本文主要介绍了阿里云OpenSearch在Text-to-SQL任务中的最新进展和技术细节。
|
SQL 运维 程序员
一个功能丰富的SQL审核查询平台
一个功能丰富的SQL审核查询平台
324 2
|
SQL 关系型数据库 MySQL
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
252 0
|
SQL 存储 安全
如何防护SQL注入
在互联网中,SQL注入攻击是网站和应用面临的主要安全威胁之一。攻击者通过在输入字段中插入恶意SQL代码,企图非法访问或操控数据库。防范措施包括限制查询长度、使用参数化查询、采用ORM框架、遵循最小权限原则、定期更新系统以及使用SCDN等专业安全产品,以增强防护能力,保护数据安全。
|
SQL 流计算
Flink SQL 在快手实践问题之Window TVF改进窗口聚合功能如何解决
Flink SQL 在快手实践问题之Window TVF改进窗口聚合功能如何解决
302 1

热门文章

最新文章

相关产品

  • 应用高可用服务