Zuul 性能调优:网关的二层超时调优

Zuul底层使用的Hystrix调用Ribbon和服务进行通信的,默认情况下的使用的是Hystrix线程池隔离的方式将,网关内的服务开启一个线程访问远程的服务,这时,通过网关服务的请求需要经过Hystrix和Ribbon进行数据的请求

线程池隔离默认的超时时间是1秒,ribbon是5秒,假如现在有个请求正常返回的数据的时间是3秒,如果在在按照默认的配置的话,数据还没返回之前,Hystrix就认为请求超时关闭了连接,此时就会出现超时异常

进行网关超时调优的是很有必要的,但是涉及到了Hystrix和Ribbon的超时设置,在设置超时时间的时候要求,ribbon的超时键必须小于Hystrix的超时时间,原因是,如果Ribbon的超时时间小于Hystrix的时间,在实际的应用中如果,Ribbon在时间内并未将数据返回,Hystrix超时没过,会继续以轮询的方式访问服务获取数据。

模拟超时

在一个服务的方法中,将线程手动休眠1秒

通过网关访问该服务方法,返回超时异常

如何进行调优

修改application配置文件

#第一层 hystrix 超时时间设置
#默认情况下是线程池隔离,超时时间 1000ms
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=8000

#第二层 ribbon 超时时间设置:设置比第一层小
# 请求连接的超时时间: 默认 5s
ribbon.ConnectTimeout=5000
# 请求处理的超时时间: 默认 5s
ribbon.ReadTimeout=5000

再次访问.数据返回正常

你可能感兴趣的:(Zuul 性能调优:网关的二层超时调优)