經(jīng)過(guò)之前大量壓測(cè),先給出效果較理想的性能參數(shù)
spring:
application:
name: api-gateway
server:
context-path: /api-gateway
port: 8040
tomcat:
accept-count: 1000 #tomcat接受排隊(duì)的最大數(shù)量
max-threads: 1000 #tomcat工作線程數(shù)量
max-connections: 2000 #tomcat處理的最大連接數(shù)
eureka:
client:
service-url:
defaultZone: xxx, xxx
instance:
prefer-ip-address: true
metadataMap:
xxx: xxx
zuul:
semaphore:
max-semaphores: 1000 #信號(hào)量
hytrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 3000 #隔離策略超時(shí)時(shí)間硫惕,默認(rèn)1000
ribbon:
MaxConnectionPerHost: 200 #每個(gè)host的最大連接數(shù)
MaxTotalConnections: 1000 #ribbon的最大連接數(shù)
PoolMaxThreads: 1000 #ribbon的最大工作線程數(shù)
ConnectTimeout: #ribbon轉(zhuǎn)發(fā)后臺(tái)服務(wù)的最大連接時(shí)間
ReadTimeout: #ribbon轉(zhuǎn)發(fā)后臺(tái)服務(wù)的最大讀取時(shí)間
說(shuō)明:
-
關(guān)于tomcat配置:
zuul是運(yùn)行于tomcat容器中的仁连,所以需要tomcat的配置,否則會(huì)引起木桶效應(yīng)径簿,整個(gè)調(diào)用流程會(huì)受到配置最差的應(yīng)用的干擾。 -
zuul.semaphore.max-semaphores::
每一個(gè)route都被HystrixCommand包裹嘀韧,Zuul中采用的是信號(hào)量的資源隔離策略篇亭,默認(rèn)semaphore的值為100,當(dāng)請(qǐng)求超過(guò)這個(gè)值時(shí)就會(huì)被立刻拒絕锄贷,所以也需要修改為:max-semaphores: 1000 -
Hystrix參數(shù)配置:
timeoutInMilliseconds的值默認(rèn)為1000译蒂,用于配置網(wǎng)關(guān)線程池和信號(hào)量隔離策略的最大超時(shí)時(shí)間,如果配置較小的話谊却,會(huì)報(bào)Hystrix timeout的Exception -
ribbon相關(guān)配置:
因?yàn)榫W(wǎng)關(guān)內(nèi)部時(shí)通過(guò)Ribbon轉(zhuǎn)發(fā)請(qǐng)求給服務(wù)提供者柔昼,所以需要配置ribbon的相關(guān)性能參數(shù),zuul內(nèi)部路由可以理解為使用一個(gè)線程池去發(fā)送路由請(qǐng)求炎辨,所以我們也需要擴(kuò)大這個(gè)線程池的容量捕透。 -
JVM參數(shù)
根據(jù)壓測(cè)結(jié)果來(lái)看,推薦Zuul的JVM參數(shù)配置為:-Xmx2g -Xms2g -Xmn1g -Xss256k碴萧,TPS和RT比較理想乙嘀,再往上調(diào)JVM內(nèi)存到4G,差別不大破喻。