`

spring cloud Zuul网关参数调优

 
阅读更多

最近遇到zuul上面的调优,记录下

 

参数调优

zuul网关的参数调优,有以下几个方面:容器、zuul、hystrix、ribbon、feign等,下面一一说明。

容器(tomcat)

以tomcat为例,调整max-threads、min-spare-threads、max-connections、max-http-header-size。具体值可自行根据压力测试结果,逐步调整。

  1.  
    server:
  2.  
    tomcat:
  3.  
    max-threads: 2000
  4.  
    min-spare-threads: 400
  5.  
    max-connections: 30000
  6.  
    max-http-header-size: 10MB

 

zuul

调整host相关参数,max-per-route-connections、max-total-connections、connect-timeout-millis、socket-timeout-millis、connection-request-timeout-millis、time-to-live。如果需要改变时间单位,可调整time-unit参数。

  1.  
    zuul:
  2.  
    host:
  3.  
    max-per-route-connections: 500
  4.  
    max-total-connections: 6000
  5.  
    connect-timeout-millis: 70000
  6.  
    socket-timeout-millis: 60000
  7.  
    # connection-request-timeout-millis: -1
  8.  
    # time-to-live: -1
  9.  
    # time-unit: milliseconds

 

调整hystrix相关参数

zuul中hystrix默认隔离策略为SEMAPHORE。如hystrix隔离策略使用线程池,需要调整ribbon-isolation-strategy参数为THREAD。如果为信号量,则为SEMAPHORE如隔离策略为THREAD,则需要配置hystrix相关参数(见下面章节)。如隔离策略为SEMAPHORE,可通过调整zuul.semaphore.max-semaphores实现。

  1.  
    zuul:
  2.  
    # hystrix 隔离策略
  3.  
    ribbon-isolation-strategy: thread
  4.  
    # zuul hystrix semaphore配置
  5.  
    # semaphore:
  6.  
    # max-semaphores: 5000
  7.  
  8.  
    # zuul hystrix thread pool配置
  9.  
  10.  
    # thread-pool:
  11.  
    # use-separate-thread-pools: false
  12.  
    # thread-pool-key-prefix: test-

 

hystrix

默认隔离策略为THREAD。通过参数hystrix.command.default.execution.isolation.strategy调整。其它详细配置,可以参见HystrixCommandProperties。

  1.  
    hystrix:
  2.  
    command:
  3.  
    default:
  4.  
    execution:
  5.  
    isolation:
  6.  
    strategy: THREAD

THREAD隔离策略下,需优化coreSize、maximumSize、maxQueueSize,具体值可通过压力测试结果,逐步调整。

  1.  
    # hystrix 默认线程池配置
  2.  
    threadpool:
  3.  
    default:
  4.  
    coreSize: 600
  5.  
    maximumSize: 1000
  6.  
    maxQueueSize: -1

另外,需要优化timeoutInMilliseconds值。

  1.  
    hystrix:
  2.  
    command:
  3.  
    default:
  4.  
    execution:
  5.  
    isolation:
  6.  
    thread:
  7.  
    timeoutInMilliseconds: 300000

 

ribbon

需优化MaxConnectionsPerHost、MaxTotalConnections、ConnectTimeout、ReadTimeout、MaxAutoRetries、MaxAutoRetriesNextServer。注意,其中的ConnectTimeout、ReadTimeout、MaxAutoRetries、MaxAutoRetriesNextServer事关hystrix.timeoutInMilliseconds计算,具体参见文章Hystrix超时时间小于ribbon超时时间报错中的介绍。详细配置,可参见DefaultClientConfigImpl、IClientConfig、IClientConfigKey。

  1.  
    ribbon:
  2.  
    MaxConnectionsPerHost: 500
  3.  
    MaxTotalConnections: 2000
  4.  
    ConnectTimeout: 60000
  5.  
    ReadTimeout: 60000
  6.  
    # MaxAutoRetries: 0
  7.  
    # MaxAutoRetriesNextServer: 1

 

feign

首先需要优化feign客户端配置中的connectTimeout、readTimeout。详细配置参见FeignClientConfiguration。

  1.  
    feign:
  2.  
    hystrix:
  3.  
    enabled: true
  4.  
    client:
  5.  
    config:
  6.  
    default:
  7.  
    connectTimeout: 60000
  8.  
    readTimeout: 40000
  9.  
    loggerLevel: full

如果需要单独为某服务设置,可将服务名替换掉default即可。

  1.  
    feign:
  2.  
    hystrix:
  3.  
    enabled: true
  4.  
    client:
  5.  
    config:
  6.  
    xmall-auth:
  7.  
    connectTimeout: 60000
  8.  
    readTimeout: 40000
  9.  
    loggerLevel: full

关于feign.client实现方式,可选择okhttp。但是,无论选择哪种实现方式,均需优化connection-timeout、max-connections、max-connections-per-route。以okhttp为例:

  1.  
    feign:
  2.  
    httpclient:
  3.  
    enabled: false
  4.  
    connection-timeout: 60000
  5.  
    max-connections: 2000
  6.  
    max-connections-per-route: 500
  7.  
    # 启用okhttp
  8.  
    okhttp:
  9.  
    enabled: true

 

最终配置

以本系列工程为例,根据压力SOAPUI 60s 并发压力测试结果,调整后的参数如下,笔者尝试的结果是:60s 10000线程,8G内存,单台示例,可无压力。

  1.  
    server:
  2.  
    port: 5566
  3.  
    tomcat:
  4.  
    max-threads: 2000
  5.  
    min-spare-threads: 400
  6.  
    max-connections: 30000
  7.  
    max-http-header-size: 10MB
  8.  
  9.  
    zuul:
  10.  
    prefix: /gateway
  11.  
    sensitive-headers:
  12.  
    routes:
  13.  
    auth:
  14.  
    path: /auth/**
  15.  
    service-id: xmall-auth
  16.  
    strip-prefix: true
  17.  
    product:
  18.  
    path: /product/**
  19.  
    service-id: xmall-product
  20.  
    strip-prefix: true
  21.  
    host:
  22.  
    max-per-route-connections: 500
  23.  
    max-total-connections: 6000
  24.  
    connect-timeout-millis: 70000
  25.  
    socket-timeout-millis: 60000
  26.  
    # connection-request-timeout-millis: -1
  27.  
    # time-to-live: -1
  28.  
    # time-unit: milliseconds
  29.  
    # hystrix 隔离策略
  30.  
    ribbon-isolation-strategy: thread
  31.  
    # zuul hystrix semaphore配置
  32.  
    # semaphore:
  33.  
    # max-semaphores: 5000
  34.  
  35.  
    # zuul hystrix thread pool配置
  36.  
  37.  
    # thread-pool:
  38.  
    # use-separate-thread-pools: false
  39.  
    # thread-pool-key-prefix: test-
  40.  
  41.  
    hystrix:
  42.  
    command:
  43.  
    default:
  44.  
    execution:
  45.  
    isolation:
  46.  
    strategy: THREAD
  47.  
    thread:
  48.  
    timeoutInMilliseconds: 300000
  49.  
    # hystrix 默认线程池配置
  50.  
    threadpool:
  51.  
    default:
  52.  
    coreSize: 600
  53.  
    maximumSize: 1000
  54.  
    maxQueueSize: -1
  55.  
  56.  
    # hystrix 服务自定义线程池配置
  57.  
    # xmall-auth:
  58.  
    # coreSize: 600
  59.  
    # maximumSize: 1000
  60.  
    # maxQueueSize: -1
  61.  
  62.  
    # ribbon配置
  63.  
    ribbon:
  64.  
    MaxConnectionsPerHost: 500
  65.  
    MaxTotalConnections: 2000
  66.  
    ConnectTimeout: 60000
  67.  
    ReadTimeout: 60000
  68.  
  69.  
    security:
  70.  
    oauth2:
  71.  
    resource:
  72.  
    user-info-uri: http://localhost:7777/oauth/user
  73.  
    prefer-token-info: false
  74.  
  75.  
    feign:
  76.  
    hystrix:
  77.  
    enabled: true
  78.  
    client:
  79.  
    config:
  80.  
    default:
  81.  
    connectTimeout: 60000
  82.  
    readTimeout: 40000
  83.  
    loggerLevel: full
  84.  
    httpclient:
  85.  
    enabled: false
  86.  
    connection-timeout: 60000
  87.  
    max-connections: 2000
  88.  
    max-connections-per-route: 500
  89.  
    # 启用okhttp
  90.  
    okhttp:
  91.  
    enabled: true
  92.  
  93.  
    management:
  94.  
    endpoints:
  95.  
    web:
  96.  
    exposure:
  97.  
    include: '*'
分享到:
评论

相关推荐

    springcloud zuul网关服务

    SpringCloud Zuul是基于Spring Cloud框架的一个核心组件,它扮演着API网关的角色,负责路由转发、过滤器处理以及安全控制等任务。Zuul的主要功能包括动态路由、过滤器机制、安全控制、负载均衡、健康检查等。下面将...

    第六章 SpringCloud Zuul网关.pdf

    Spring Cloud Zuul网关 Spring Cloud Zuul网关是微服务架构中的一种网关解决方案,主要用于解决微服务之间的调用和路由问题。在本章节中,我们将了解Zuul网关的基本概念和使用方法,以及如何将其应用于微服务架构...

    springcloud zuul 网关实现源码

    springcloud zuul 网关开发实践,模拟了在Spring Cloud微服务系统中,客户端的请求首先经过负载均衡(zuul、Ngnix),再到达服务网关(zuul集群),然后再到具体的服的实现过程。

    SpringCloud Zuul网关功能实现解析

    SpringCloud Zuul网关功能实现解析 SpringCloud Zuul网关功能实现解析是基于 SpringCloud 生态系统的微服务架构中的一种网关解决方案。 Zuul 是 Netflix 公司开源的一个基于 Java 的 API Gateway 项目,旨在提供一...

    springcloud zuul gateway 服务网关

    SpringCloud Zuul Gateway 服务网关是Spring Cloud生态系统中的一个重要组件,它主要负责微服务架构中的路由转发和过滤器功能。Zuul是Netflix开源的一个边缘服务,而Gateway则是Spring Cloud针对Zuul进行的升级版,...

    SpringCloud zuul jar包

    通过引入Zuul,你可以将所有对外的请求都集中到Zuul网关上,由Zuul处理请求的分发,从而解耦了客户端与后端服务的直接交互。 Zuul的核心特性包括: 1. **路由转发**:Zuul可以将来自客户端的请求路由到不同的...

    spring cloud zuul

    综上所述,Spring Cloud Zuul 是一个功能强大的 API 网关解决方案,它通过动态路由、过滤器机制以及与其他 Spring Cloud 组件的集成,为微服务架构提供了关键的支持。开发者可以根据业务需求,利用 Java 和 Groovy ...

    Springcloud Zuul config eureka ribbon实例

    接下来,Zuul是Spring Cloud的边缘服务,也是一个API网关。`demo-zuul-master.zip`中的代码展示了如何设置和使用Zuul。Zuul可以处理所有来自客户端的请求,执行如认证、路由、过滤等操作。它将请求转发到合适的...

    spring cloud 使用Zuul 实现API网关服务问题

    Spring Cloud 使用 Zuul 实现 API 网关服务问题 在本文中,我们将主要介绍如何使用 Spring Cloud 的 Zuul 组件来实现 API 网关服务问题。 Zuul 是一个基于 Netflix Zuul 的 API 网关组件,它可以解决路由规则和服务...

    06Spring Cloud Zuul:API网关服务1

    Spring Cloud Zuul:API网关服务详解 Spring Cloud Zuul 是 Spring Cloud Netflix 子项目的核心组件之一,可以作为微服务架构中的 API 网关使用,支持动态路由与过滤功能。API 网关为微服务架构中的服务提供了统一...

    Spring Cloud Zuul带注册中心Consul

    Spring Cloud Zuul是基于Spring Boot实现的微服务网关,它提供路由转发、过滤器等功能,使得客户端可以方便地访问到后端微服务。在这个示例中,Zuul与Consul结合,使得Zuul能够动态地发现注册在Consul中的服务,实现...

    《深入理解Spring Cloud与微服务构建》学习笔记(十七)~路由网关Spring Cloud Zuul~负载均衡

    在本篇学习笔记中,我们将深入探讨Spring Cloud框架中的一个重要组件——Spring Cloud Zuul,它作为微服务架构中的路由网关和负载均衡器。Spring Cloud是基于Java的微服务工具集,它为开发者提供了在分布式系统(如...

    微服务 Springcloud Zuul

    - **接收请求**:客户端的请求首先到达Zuul网关。 - **预处理过滤器**:执行预过滤器,如安全检查、日志记录等操作。 - **路由转发**:根据路由规则,将请求转发至对应的服务实例。 - **后处理过滤器**:请求...

    Spring Cloud Zuul动态路由demo

    Spring Cloud Zuul 是一个边缘服务,作为微服务架构中的API网关,它扮演着动态路由、过滤器、安全控制等多种角色。本篇文章将深入探讨如何使用Spring Cloud Zuul实现动态路由,并通过实际的代码示例——"Spring ...

    《深入理解Spring Cloud与微服务构建》学习笔记(十六)~路由网关Spring Cloud Zuul

    3. **启动Zuul**:在Spring Boot主类上添加`@EnableZuulProxy`注解,以启用Zuul网关功能。 **三、Zuul过滤器的使用** 1. **创建自定义过滤器**:可以通过继承ZuulFilter抽象类并重写相关方法来创建自定义过滤器。...

    使用SpringCloud Zuul Proxy构建API网关.docx

    Spring Cloud Zuul Proxy 是一个非常流行的工具,用于构建这样的 API 网关。在本文中,我们将深入探讨如何使用 Spring Cloud Zuul Proxy 实现 API 网关,并分析其优点和缺点。 **为什么要使用 API 网关?** API ...

    spring-cloud-zuul(包含注册中心、服务生产者、服务消费者、zuul网关路由).zip

    三、Zuul网关路由 SpringCloud-2.0-service-zuul-80 代表了Zuul服务网关,它是所有微服务请求的统一入口。Zuul的主要职责有: 1. 路由转发:根据请求路径将请求转发到对应的服务提供者,实现服务间的解耦。 2. ...

    spring cloud zuul 使用

    Spring Cloud Zuul是Spring Cloud生态系统中的一个边缘服务和API网关组件。它作为一个过滤器路由,为微服务架构提供统一的入口,同时处理预处理、安全、限流等功能。这篇博客文章“Spring Cloud Zuul使用”可能详细...

    《深入理解Spring Cloud与微服务构建》学习笔记(十八)~路由网关Spring Cloud Zuul~熔断器

    在深入探讨Spring Cloud和微服务构建的过程中,Spring Cloud Zuul是一个关键组件,它扮演着路由网关和熔断器的角色。本文将详细讲解Zuul的功能、原理以及如何在Spring Boot应用中集成和配置。 首先,Spring Cloud ...

Global site tag (gtag.js) - Google Analytics