经过之前大量压测,先给出效果较理想的性能参数
spring:
application:
name: api-gateway
server:
context-path: /api-gateway
port: 8040
tomcat:
accept-count: 1000 #tomcat接受排队的最大数量
max-threads: 1000 #tomcat工作线程数量
max-connections: 2000 #tomcat处理的最大连接数
eureka:
client:
service-url:
defaultZone: xxx, xxx
instance:
prefer-ip-address: true
metadataMap:
xxx: xxx
zuul:
semaphore:
max-semaphores: 1000 #信号量
hytrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 3000 #隔离策略超时时间,默认1000
ribbon:
MaxConnectionPerHost: 200 #每个host的最大连接数
MaxTotalConnections: 1000 #ribbon的最大连接数
PoolMaxThreads: 1000 #ribbon的最大工作线程数
ConnectTimeout: #ribbon转发后台服务的最大连接时间
ReadTimeout: #ribbon转发后台服务的最大读取时间
说明:
-
关于tomcat配置:
zuul是运行于tomcat容器中的,所以需要tomcat的配置,否则会引起木桶效应,整个调用流程会受到配置最差的应用的干扰。 -
zuul.semaphore.max-semaphores::
每一个route都被HystrixCommand包裹,Zuul中采用的是信号量的资源隔离策略,默认semaphore的值为100,当请求超过这个值时就会被立刻拒绝,所以也需要修改为:max-semaphores: 1000 -
Hystrix参数配置:
timeoutInMilliseconds的值默认为1000,用于配置网关线程池和信号量隔离策略的最大超时时间,如果配置较小的话,会报Hystrix timeout的Exception -
ribbon相关配置:
因为网关内部时通过Ribbon转发请求给服务提供者,所以需要配置ribbon的相关性能参数,zuul内部路由可以理解为使用一个线程池去发送路由请求,所以我们也需要扩大这个线程池的容量。 -
JVM参数
根据压测结果来看,推荐Zuul的JVM参数配置为:-Xmx2g -Xms2g -Xmn1g -Xss256k,TPS和RT比较理想,再往上调JVM内存到4G,差别不大。