記一次springcloud並發優化


使用組件 springcloud套件 + mysql

一個普通的rest請求,做個用戶基礎信息查詢,sql已進行優化 const級別,但是通過jemeter進行壓測,發現實際並發量只有20-30,經檢查后發現是配置未優化問題,解決方式如下:

 

1. 增加springboot mysql連接池配置,默認使用的為HikariDataSource。配置如下

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: cjs-base
    password: xxx
    url: jdbc:mysql://xxx:3306/xxx?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
    hikari:
      minimum-idle: 100
      maximum-pool-size: 500
      idle-timeout: 30000
      max-lifetime: 180000
      # connection-timeout: 5000
      connection-test-query: select 1
      connection-init-sql: select 2
      #多少毫秒檢測一次連接泄露.
      leak-detection-threshold: 1000
      test-on-borrow: true
      test-on-connect: true
      test-on-return: true
      test-while-idle: true
      #指定空閑連接檢查、廢棄連接清理、空閑連接池大小調整之間的操作時間間隔
      time-between-eviction-runs-millis: 10000
      #是否對連接進行包裝,防止連接關閉之后被使用.
      use-disposable-connection-facade: true
      validation-interval: 10000
      alidation-query: select 3
      validation-query-timeout: 5000
      #設定連接校驗的超時時間,當使用Hikari connection pool時指定
      alidation-timeout: 5000    

其中連接池大小,根據自己項目情況配置。

 

2. 修改fegin配置,一般默認就好。主要是防止資源占用無法釋放,需要將超時時間設置小一些。

feign:
  hystrix:
    enabled: true
  okhttp:
    enabled: true
  httpclient:
    enabled: false
  client:
    config:
      feignName:
        connectTimeout: 1000
        readTimeout: 1000
  compression:
    request:
      enabled: true
    response:
      enabled: true

 3.修改hystrix配置,將連接池大小設置為大於需要的並發量

hystrix:
  threadpool:
    default:
      coreSize: 500
      maxQueueSize: 1000
  command:
    default:
      circuitBreaker: 
        requestVolumeThreshold: 50
      execution:
        isolation:
          semaphore:
            maxConcurrentRequests: 1000
          strategy: SEMAPHORE
          thread:
            timeoutInMilliseconds: 1000
  shareSecurityContext: true

  4.修改ribbon配置

#請求處理的超時時間
ribbon:
  ReadTimeout: 1000
  ConnectTimeout: 1000

5. 增加微服務的實例數量,在k8s中將各微服務的數量按需擴容,我這邊每個微服務擴容為3個實例,加上以上的配置優化,並發量大約可控制在250左右,已滿足當前業務需求。 如還需要進一步的優化,可采用加大服務實例、增加NOSQL的實現方式來實現

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM