1.当请求量大时,可能会拖垮整个网站,通常会采取限流措施,降低机器的负载。
2.简单的措施是加一个filter拦截器,设置一个静态原子变量,当该变量大于设置的阈值时就直接return返回,不做后续处理,称该方案为方案一。
3.由于方案一的阈值是静态设定的,我们可以采取动态的更改该阈值,即方案一的优化方案。那么该阈值通过什么样的方式更改呢?
(1)存储数据库,定时去数据库中读取。
(2)放在配置中心,定时拉该数据。
称该方案为方案二
4.方案一代码示例:
public class StableControlFilter implements Filter{ private AtomicInteger count = new AtomicInteger(); public void doFilter(final ServletRequest request,final ServletResponse response, final FilterChain chain){ boolean entry=isEntry(); if(entry){ try{ count.incrementAndGet(); chain.doFilter(request,response); }finally{ count.decrementAndSet(); } } return ; } private boolean isEntry( ){ if(count > ConfigerConstant.requestCount){ return false; } return true; }}
5.方案二中,主要是动态设置阈值ConfgerConstant.requestCount的值。
联系客服