隔离规则是通过控制接口或依赖的并发线程数,来保证系统的稳定性。该规则适用于应用内部或下游依赖出现不稳定的场景,例如慢SQL、下游应用响应时间变长等。本文介绍配置隔离规则的操作步骤。
前提条件
背景信息
当强依赖的方法或接口出现不稳定的时候,可以通过配置并发线程数来限制不稳定的强依赖并发数,起到隔离异常的效果。若运行该请求的响应时间变长,会导致线程的并发数变大。当并发数超过阈值以后,AHAS将拒绝多余的请求,直到堆积的任务完成,并发线程数变少。达到将异常隔离,减小不稳定性的效果。
如何设定并发线程数阈值,可参见以下内容:
- 并发线程数 = 期望QPS*响应时间+冗余量。
- 例如预期的SQL执行时间为20毫秒,预期该请求每秒有20个,并发最大时候是6个,建议并发线程数按照以下逻辑设置:Max(20/1000*20,6)= 6 ,再加上冗余量2 ,则建议并发数阈值设置为8。
- 设置好后,当这个SQL发生死锁或者有性能问题,SQL运行特别慢成为慢SQL时,即使请求不断的进来,也仅仅会占用10个线程,不会因为持续进来的请求(请求也无法在短时间内退出),从而耗光进程的活跃线程。
- 当这个SQL恢复正常后,并发数会迅速减少。当并发数减少至低于预设的阈值时,系统就不会拒绝请求,应用的处理能力也快速的恢复。通过这样的方式,起到了根据响应时间自动调节的效果,隔离了不稳定的应用。
隔离规则配置通常用于强依赖隔离场景,详情请参见强依赖隔离。
操作步骤
常用场景1:保障自身资源充足
当运行该请求的响应时间变长,会导致线程的并发数变大。当并发数超过阈值以后,AHAS将拒绝多余的请求,直到堆积的任务完成,并发线程数变少。达到将异常隔离,减小不稳定性的效果。例如某个SQL执行时间为20毫秒,预期该请求每秒有20个。
在新建隔离规则对话框中配置以下规则信息:
- 填写接口名称和来源应用。
- 统计维度选择当前接口。
- 并发数阈值为10。
设置完成后,当这个SQL发生死锁或者存在性能问题时,该SQL运行变慢,成为慢SQL,此时即使请求不断进来,也仅仅会占用10个线程,不会因为持续进来的请求(请求也无法在短时间内退出),从而耗光进程的活跃线程。当这个SQL恢复正常后,并发数会迅速减少。当并发数减少至低于预设的阈值时,系统就不会拒绝请求,应用的处理能力也快速的恢复。通过这样的方式,起到了根据响应时间自动调节的效果,隔离了不稳定的应用。
常用场景2:有一定相关联性的接口
当关联接口被来源应用调用QPS超过阈值时,会对当前接口来源应用的请求进行限流,有一定的相关性的方法来配置规则。例如read_db
和 write_db
这两个资源分别代表数据库读写,write_db
接口优先级更高。
为保证读写资源争抢时,write_db
的接口可以留足资源,可在新建隔离规则对话框中配置以下规则信息:
- 接口名称为
write_db
。 - 统计维度选择关联接口。
- 关联接口名为
read_db
。 - 并发数阈值为10。
这样在read_db
接口被调用QPS超过10次后,会对write_db
接口来自于来源应用的请求进行隔离限流,保证write_db
的足够资源。
常用场景3:针对入口链路来配置隔离规则
从入口处将资源进行分别隔离,以保障更高优先级入口。当callstack入口被来源应用调用QPS数超过阈值时,会对当前接口来自于来源应用的请求进行隔离流控。
在新建隔离规则对话框中配置以下规则信息:
- 填写接口名称和来源应用。
- 统计维度选择链路入口。
- 并发数阈值设置为10。
当callstack入口的接口被调用超过10次,当前接口user_test
会对来自于来源应用的请求进行隔离流控。