[SpringCloud] 组件性能优化技巧

这篇具有很好参考价值的文章主要介绍了[SpringCloud] 组件性能优化技巧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • Feign 配置优化
  • hystrix配置 优化
  • ribbon 优化
  • Servlet 容器 优化
  • Zuul配置 优化

1.Servlet 容器 优化

默认情况下, Spring Boot 使用 Tomcat 来作为内嵌的 Servlet 容器, 可以将 Web 服务器切换到 Undertow 来提高应用性能, Undertow 是红帽公司开发的一款基于 NIO 的高性能 Web 嵌入式。

Zuul使用的内置容器默认是Tomcat, 可以将其换成undertow, 可以显著减少线程的数量。


<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
   <exclusions>
      <exclusion>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-tomcat</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
server:
  undertow:
     io-threads: 16
     worker-threads: 256
     buffer-size: 1024
     buffers-per-region: 1024
     direct-buffers: true
  1. server.undertow.io-threads: 设置IO线程数, 主要执行非阻塞的任务。
  2. server.undertow.worker-threads: 阻塞任务线程池 。
  3. server.undertow.buffer-size: 类似netty的池化内存管理, buffer的大小, 小的空间被利用更充分。
  4. server.undertow.buffers-per-region: 每个区分配的buffer数量。
  5. server.undertow.direct-buffers: 是否分配的直接内存(NIO直接分配的堆外内存)。

2.Feign 配置优化

feign 默认不启用hystrix, feign.hystrix.enabled=true 开启熔断。

feign 启用压缩也是一种有效的性能优化方式。

feign:
 compression:
  request:
   enabled: true
   mime-types: text/xml,application/xml,application/json
  response:
   enabled: true

feign HTTP请求方式选择。

feign默认使用的是基于JDK提供的URLConnection调用HTTP接口, 无线程池, Apache HttpClientokhttp都支持配置连接池功能, 也可以使用okhttp请求方式。

HttpClient:

feign:
  httpclient:
    enabled: true
    max-connections:1000
    max-connections-per-route: 200 

okHttp:

feign:
  okhttp:
    enabled: true
  httpclient:
    max-connections: 1000
    max-connections-per-route: 200   
  1. max-connections: 设置整个连接池最大连接数。
  2. max-connections-per-route: 设置路由的默认最大连接。

3.Zuul配置 优化

Hystrix有隔离策略: THREAD 以及SEMAPHORE, 默认是 SEMAPHORE 。

Zuul默认是使用信号量隔离, 信号量数量为100, 请求的并发线程超过100就会报错。

zuul:
  semaphore:
    max-semaphores: 5000

为了方便ThreadLocal的使用, 可以改变隔离策略, 需要调大hystrix的线程池大小。

zuul:
  ribbonIsolationStrategy: THREAD
hystrix:
  threadpool:
    default:
      coreSize: 100
      maximumSize: 400
      allowMaximumSizeToDivergeFromCoreSize: true
      maxQueueSize: -1
  1. hystrix.threadpool.default.allowMaximumSizeToDivergeFromCoreSize: 是否让maximumSize生效, false为只有coreSize会生效。
  2. hystrix.threadpool.default.maxQueueSize: 线程池的队列大小。
  3. hystrix.threadpool.default.maximumSize: 最大线程数。
  4. zuul.ribbon-isolation-strategy: 线程隔离策略。

4.hystrix配置 优化

需要设置参数hystrix.threadpool.default.coreSize 来指定熔断隔离的线程数, 这个数需要调优。

hystrix:
  threadpool:
    default:
      coreSize: 500
  command:
    default:
   circuitBreaker: 
     requestVolumeThreshold: 1000
      fallback:
        enabled: true
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 100000 
  1. hystrix.command.default: 全局作用域, 作用的所有的hystrix的客户端, 如果需要对某个微服务, 可以写serviceId。
  2. hystrix.command.default.fallback.enabled: 是否开启回退方法。
  3. hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 请求处理的超时时间, 缺省为1000,表示默认的超时时间为1S。
  4. hystrix.threadpool.default.coreSize 核心线程池数量。
  5. hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests 回退最大线程数。
  6. hystrix.command.default.circuitBreaker.requestVolumeThreshold: 熔断器失败的个数

5.ribbon 优化

Ribbon进行客户端负载均衡的Client并不是在服务启动的时候就初始化好的, 而是在调用的时候才会去创建相应的Client, 所有第一次调用的耗时不仅仅包含发送HTTP请求的时间, 还包括了创建RibbonClient的时间。文章来源地址https://www.toymoban.com/news/detail-656132.html

ribbon:
 eager-load:
     enabled:true
 clients:service-1,service-2,service-n
  1. ribbon.eager-load.enabled: 开启Ribbon的饥饿模式。
  2. ribbon.eager-load.clients: 指定需要饥饿加载的服务名。

到了这里,关于[SpringCloud] 组件性能优化技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包