隔离规则是通过控制接口或依赖的并发线程数,来保证系统的稳定性。该规则适用于应用内部或下游依赖出现不稳定的场景,例如慢SQL、下游应用响应时间变长等。本文介绍配置隔离规则的操作步骤。

前提条件

请确保您的Java应用已开启限流降级功能。具体步骤,请参见设置限流降级

背景信息

当强依赖的方法或接口出现不稳定的时候,可以通过配置并发线程数来限制不稳定的强依赖并发数,起到隔离异常的效果。若运行该请求的响应时间变长,会导致线程的并发数变大。当并发数超过阈值以后,AHAS将拒绝多余的请求,直到堆积的任务完成,并发线程数变少。达到将异常隔离,减小不稳定性的效果。

如何设定并发线程数阈值,可参见以下内容:

  • 并发线程数 = 期望QPS*响应时间+冗余量。
  • 例如预期的SQL执行时间为20毫秒,预期该请求每秒有20个,并发最大时候是6个,建议并发线程数按照以下逻辑设置:Max(20/1000*20,6)= 6 ,再加上冗余量2 ,则建议并发数阈值设置为8。
  • 设置好后,当这个SQL发生死锁或者有性能问题,SQL运行特别慢成为慢SQL时,即使请求不断的进来,也仅仅会占用10个线程,不会因为持续进来的请求(请求也无法在短时间内退出),从而耗光进程的活跃线程。
  • 当这个SQL恢复正常后,并发数会迅速减少。当并发数减少至低于预设的阈值时,系统就不会拒绝请求,应用的处理能力也快速的恢复。通过这样的方式,起到了根据响应时间自动调节的效果,隔离了不稳定的应用。

隔离规则配置通常用于强依赖隔离场景,详情请参见强依赖隔离

操作步骤

  1. 登录SAE控制台
  2. 在左侧导航栏单击应用列表,在应用列表页面上方选择地域,单击具体应用名称。
  3. 在左侧导航栏中选择限流降级(仅支持Java) > 规则管理
  4. 规则管理页面,单击隔离规则,在隔离规则页签,单击新增隔离规则
  5. 新增流控规则对话框,设置参数,单击新建
    新增隔离规则
    参数说明如下:
    参数 描述
    接口名称 待隔离的资源名称。
    来源应用 该规则针对的来源应用,默认来源应用设为default,表示不区分来源应用。
    • 若是Dubbo服务,请填写对应调用方的Dubbo applicationName,注意调用方也需要接入Sentinel。
    • 若是Web服务,请参见扩展接口
    • 若是通过注解、自定义埋点,请参见常用类及其方法,ContextUtil只在调用链入口生效,即首个埋点生效。
    • 当前账号下已经接入了流量防护的其他应用,填写default即表示不特殊区分。
    注意 来源数目不宜过多,200个以内内存使用量可控,过多则会影响性能。
    流量示意图
    统计维度 选择资源调用关系进行隔离流控。
    • 当前接口:直接控制来自来源应用中调用来源的访问流量,如果来源应用default则不区分调用来源,通常应用于保障自身资源充足的场景,请参见常用场景1
    • 关联接口:控制当前资源的关联资源的流量。通常应用于资源争抢时,留足资源给优先级高接口的场景,请参见常用场景2
    • 链路入口:控制该资源所在的调用链路的入口流量。选择链路入口后需要继续配置callstack入口,即该调用链路入口的上下文名称。通常应用于接口有多入口资源的场景,请参见常用场景3
    并发数阈值 资源的并发线程数(即该资源正在执行的线程数)阈值。

常用场景1:保障自身资源充足

当运行该请求的响应时间变长,会导致线程的并发数变大。当并发数超过阈值以后,AHAS将拒绝多余的请求,直到堆积的任务完成,并发线程数变少。达到将异常隔离,减小不稳定性的效果。例如某个SQL执行时间为20毫秒,预期该请求每秒有20个。

新建隔离规则对话框中配置以下规则信息:

  • 填写接口名称来源应用
  • 统计维度选择当前接口
  • 并发数阈值为10。
Quarantine_new

设置完成后,当这个SQL发生死锁或者存在性能问题时,该SQL运行变慢,成为慢SQL,此时即使请求不断进来,也仅仅会占用10个线程,不会因为持续进来的请求(请求也无法在短时间内退出),从而耗光进程的活跃线程。当这个SQL恢复正常后,并发数会迅速减少。当并发数减少至低于预设的阈值时,系统就不会拒绝请求,应用的处理能力也快速的恢复。通过这样的方式,起到了根据响应时间自动调节的效果,隔离了不稳定的应用。

常用场景2:有一定相关联性的接口

当关联接口被来源应用调用QPS超过阈值时,会对当前接口来源应用的请求进行限流,有一定的相关性的方法来配置规则。例如read_dbwrite_db这两个资源分别代表数据库读写,write_db接口优先级更高。

为保证读写资源争抢时,write_db的接口可以留足资源,可在新建隔离规则对话框中配置以下规则信息:

  • 接口名称write_db
  • 统计维度选择关联接口
  • 关联接口名read_db
  • 并发数阈值为10。
Quarantine_new_associated

这样在read_db接口被调用QPS超过10次后,会对write_db接口来自于来源应用的请求进行隔离限流,保证write_db的足够资源。

常用场景3:针对入口链路来配置隔离规则

从入口处将资源进行分别隔离,以保障更高优先级入口。当callstack入口被来源应用调用QPS数超过阈值时,会对当前接口来自于来源应用的请求进行隔离流控。

新建隔离规则对话框中配置以下规则信息:

  • 填写接口名称来源应用
  • 统计维度选择链路入口
  • 并发数阈值设置为10。
Quarantine_new_entrance

callstack入口的接口被调用超过10次,当前接口user_test会对来自于来源应用的请求进行隔离流控。

问题反馈

如果您在使用SAE过程中有任何疑问,欢迎您扫描下面的二维码或搜索钉钉群号23198618,加入钉钉群与我们交流。SAE钉钉群2