zoukankan      html  css  js  c++  java
  • 阿里云应用高可用服务 AHAS 流控降级实现 SQL 自动防护功能

    在影响系统稳定性的各种因素中,慢 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资源,超过设置的值后多余的请求将被拒绝。

    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 的防护手段,通过 监控->发现异常->配置规则->有效防护 保障应用的高可用服务能力。

    本文作者:中间件小哥

    原文链接

    本文为云栖社区原创内容,未经允许不得转载。

  • 相关阅读:
    解决:hdfs: org.apache.hadoop.security.AccessControlException(Permission denied)
    新的开始
    死锁问题------------------------INSERT ... ON DUPLICATE KEY UPDATE*(转)
    hql- 使用like的小坑①
    数美面试检讨
    问题:计算foldRight(1)(_-_) 与foldLeft(1)(_-_)值不一样
    学习笔记之流文件操作01(拷贝文件)
    学习笔记之正则表达式
    数据结构之单链表
    (转)消息中间件(二)MQ使用场景
  • 原文地址:https://www.cnblogs.com/zhaowei121/p/11424133.html
Copyright © 2011-2022 走看看