Spring Boot Zuul 网关性能优化

测试版本:spring boot 1.5 +spring Cloud Dalston版
在使用基于jhipster生成的gateway项目中使用jmeter进行了压力测试发现效果不是太理想,所以针对了spring boot项目进行了优化,主要是两方面一个是JVM启动的参数,另外一块是增加了tomcat的配置优化,主要是从这两方面着手来进行优化,我们测试的应用请求流程图图如下:


image.png

我们的网关由于因为扩展了多版本的接口管理,所以采取了模拟用户2:1的访问过程,也就是两个用户访问版本1的接口,1个用户访问版本2的接口,
原有网关zuul的server配置如下:

server:
    session:
        cookie:
            http-only: true
    tomcat:
        uriEncoding: UTF-8
        maxThreads: 2000

然后启动的微服务脚本如下:

JAVA_OPTS="\
-Xmx4g \
-Xms4g \
-Xmn2g \
-XX:SurvivorRatio=8 \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m \
-XX:+UseParallelGC \
-XX:ParallelGCThreads=4 \
-XX:+UseParallelOldGC \
-XX:+UseAdaptiveSizePolicy \
-XX:+PrintGCDetails \
-XX:+PrintTenuringDistribution \
-XX:+PrintGCTimeStamps \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/ \
-Xloggc:/gc.log \
-XX:+UseGCLogFileRotation \
-XX:NumberOfGCLogFiles=5 \
-XX:GCLogFileSize=10M  "

java ${JAVA_OPTS} -jar ../lib/xxxx.war --spring.profiles.active=dev --server.port=18080 > /dev/null &
##xxx分别代表网关,注册中心以及各个应用的war包

按照这个测试配置测试的结果如下:


image.png

然后我们使用了开源的微服务版本选择器,以及在spring boot增加了一个tomcat的配置类,tomcat配置类主要增加最大连接数和链接超时,配置类如下:

import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class WebServerConfiguration
{
    @Bean
    public EmbeddedServletContainerFactory createEmbeddedServletContainerFactory()
    {
        TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory();
        tomcatFactory.addConnectorCustomizers(new MyTomcatConnectorCustomizer());
        return tomcatFactory;
    }
}
class MyTomcatConnectorCustomizer implements TomcatConnectorCustomizer
{
    public void customize(Connector connector)
    {
        Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
        //设置最大连接数
        protocol.setMaxConnections(2000);
        //设置最大线程数
        protocol.setMaxThreads(2000);
        //连接超时
        protocol.setConnectionTimeout(30000);
    }
}

这个配置类来源于tomcat的配置文件的,但是spring boot 采用的tomcat内核去掉一些配置,所以这里采用这几项,然后版本选择我们采用了Spring Cloud中国社区开源的spring-cloud-gray来替换我们自己的实现,具体使用大家可以到github去查看使用很方便的,替换完成以后我们的测试结果如下:

image.png

至此我们的总事务数比以前提高了好几倍,这样的性能算是有一个比较质的提升,后续在优化其他参数单个网关的性能应该还可以在继续提升,

你可能感兴趣的:(Spring Boot Zuul 网关性能优化)