作为微服务架构系统的入口,毫无疑问,Zuul的并发性能直接决定了整个系统的并发性能。本文结合前几篇文章的内容,在云服务器中部署了包含Eureka Server,Zuul等组件的1.0版本的微服务架构,并进行单点部署Zuul的压力测试,对其并发性能一探究竟。
环境
说明
转载请说明出处:SpringCloud从入门到进阶(九)——单点部署Zuul的压力测试与调优(二)
问题回顾 在上文中,我们在默认配置情况下,使用ApacheBench对微服务架构1.0中的Zuul和Service分别进行了压力测试,每次测试共50000个请求,并发用户数分别为50、200、500。在测试过程中我们遇到了如下三个问题:
问题一:Zuul端转发请求的线程数与后端Service处理请求的线程数不一致,它们之间是什么关系呢?
问题二:Zuul为什么会在Serivce正常的情况下出现服务熔断呢?
问题三:为什么后端Service的并发线程数量达到200后没有随并发用户数的进一步增大而增大呢?
下面,我们按照由易到难的顺序进行剖析这些问题,探究Zuul如何进行调优。
问题三 问题剖析 为什么后端Service的并发线程数量达到200后没有随并发用户数的增大而增大呢?
SpringBoot默认使用8.5版本的Tomcat作为内嵌的Web容器。因此Zuul或Service接收到的请求时,都是由Tomcat中Connector的线程池数量决定,也就是worker线程数。
Tomcat中默认的worker线程数的最大值为200(官方文档中有说明),可以在yaml中增加server.tomcat.max-threads属性来设置worker线程数的最大值。
配置调优因此,问题三的解决方案是在Zuul端和Service端的yaml中增加如下配置:
#增大tomcat中worker的最大线程数量 server: tomcat: max-threads: 500