springcloud之zuul的配置及優化

zuul 是netflix開源的一個網關服務器,本質就是個servelet服務,提供了代理、路由、過濾三大功能,作爲網關可以說非常適合不過了。
那麼一下就展示一下我自己工作中zuul的配置:

1、在屬性文件配置服務器的代理配置
(1)、通過service-id配置
#代理服務(其中zuul.routes後面的test1必須唯一)
#zuul路由到目標路徑的時候是否要加前綴,fase 要加前醉, true去除前綴   (備註:默認爲true)
zuul.routes.test1.stripPrefix=false
#請求zuul的時候,如果匹配到test-service就會執行此配置的內容
zuul.routes.test1.path=/test-service/**
#Eureka中的serviceId,zuul會將此請求負載均衡代理到serviceId爲test-service的服務器
zuul.routes.test1.service-id=test-service
(2)、通過ip地址配置
#代理服務(其中zuul.routes後面的test2必須唯一)
#zuul路由到目標路徑的時候是否要加前綴,fase 要加前醉, true去除前綴   (備註:默認爲true)
zuul.routes.test2-service.stripPrefix=false
#請求zuul的時候,如果匹配到test-service就會執行此配置的內容
zuul.routes.test2-service.path=/test-service/**
#zuul會將請求負載均衡到以下服務器
test.ribbon.listOfServers:10.148.15.74:8770,10.148.15.74:8771
2、註冊到eureka的配置
#指定服務註冊中心的地址
eureka.client.service-url.defaultZone=http://xxxxx:xx/eureka/eureka/
#註冊服務的時候使用服務的ip地址
eureka.instance.prefer-ip-address=true
#註冊到eureka的名稱,
eureka.instance.instance-id=${spring.application.name}:${server.port}
3、 tomcat配置
#tomcat接受排隊的最大數量(當tomcat起動的線程數達到最大時,接受排隊的請求個數,默認值爲100)
server.tomcat.accept-count=1000  
#tomcat最大工作線程數量(tomcat起動的最大線程數,即同時處理的任務個數,默認值爲200)
server.tomcat.max-threads=1000 
#tomcat最小工作線程數量
server.tomcat.min-spare-threads=64
#tomcat處理的最大連接數
server.tomcat.max-connections=2000
4、ribbon配置
#開啓zuul重試機制(解決feign和zuul超時, 建議不實用)
zuul.retryable=true
#對當前服務的重試次數
ribbon.MaxAutoRetries=1
#切換相同Server的次數
ribbon.MaxAutoRetriesNextServer=2
#每個host的最大連接數
ribbon.MaxConnectionPerHost=500
#ribbon的最大連接數
ribbon.MaxTotalConnections=1000
#ribbon的最大工作線程數
ribbon.PoolMaxThreads=1000
5、zuul隔離機制

zuul有兩種隔離機制 線程池隔離和信號量隔離,從我的測試來看,線程池隔離機制顯然要好與信號量隔離機制

(1)先看看信號量隔離,信號量默認值是100,也就是當請求數量大於100,就會返回500的錯誤
#使用信號量提高zuul性能
zuul.semaphore.max-semaphores=5000
# 使用okhttp方式請求,正常來說okhttp比較速度快一點
zuul.okhttp.enabled=true 
#zuul啓動會去註冊中心找服務 預先去註冊中心找服務然後再加載 速度會快點
ribbon.eager-load.clients=test1-service,test2-service,test3-service
(2)使用線程池隔離,線程池不是越大越好的,如果特別大那消峯效果比較好,但是響應的請求的等待時間也會加大
#開啓線程池隔離機制
zuul.thread-pool. use-separate-thread-pools=true
#制定一個線程池前綴
zuul.thread-pool. thread-pool-key-prefix=test
#線程池核心數量
hystrix.threadpool.default.coreSize=50
#線程池最大數量
hystrix.threadpool.default.maximumSize=1000
6、配置壓縮
# 配置請求GZIP壓縮
feign.compression.request.enabled=true
# 配置響應GZIP壓縮
feign.compression.response.enabled=true
# 配置壓縮支持的MIME TYPE
feign.compression.request.mime-types=text/xml,application/xml,application/json
# 配置壓縮數據大小的下限
feign.compression.request.min-request-size=2048
7、自定義超時時間
#以下配置ribbon的超時時間,如果路由方式是serviceId那麼ribbon超時會起效果,否則zuul.host會起效果
#ribbon轉發後臺服務的最大讀取時間(路由方式是serviceId)
ribbon.ReadTimeout=20000
#ribbon轉發後臺服務的最大連接時間(路由方式是serviceId)
ribbon.ConnectTimeout=20000
#路由方式是ip地址的時候,此配置會起效果
zuul.host.connect-timeout-millis=20000
zuul.host.socket-timeout-millis=20000

#如果你在zuul配置了熔斷fallback的話,熔斷超時也要配置,不然如果你配置的ribbon超時時間大於熔斷的超時,那麼會先走熔斷,相當於你配的ribbon超時就不生效了
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=50000
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章