Hystrix生產環境線程池自動擴容與縮容的動態資源分配經驗

可能會出現一種情況,比如說我們的某個依賴,在高峯期,需要耗費100個線程,但是在那個時間段,剛好其他的依賴的線程池其實就維持一兩個就可以了。但是,如果我們都是設置死的,每個服務就給10個線程,那就可能就導致有的服務在高峯期需要更多的資源,但是沒資源了,導致很多的reject。因此我們做成彈性的線程資源調度的模式。剛開始的時候,每個依賴服務都是給1個線程,3個線程,但是我們允許以下情況,如果某個線程池突然需要大量的線程,最多可以到100個線程,並且高峯期過去後,自動將空閒的線程給釋放掉

  1. coreSize
    設置線程池的大小,默認是10

    HystrixThreadPoolProperties.Setter().withCoreSize(int value)
  2. maximumSize
    設置線程池的最大大小,只有在設置allowMaximumSizeToDivergeFromCoreSize的時候才能生效,默認是10個線程

    HystrixThreadPoolProperties.Setter().withMaximumSize(int value)
  3. keepAliveTimeMinutes
    設置保持存活的時間,單位是分鐘,默認是1。如果設置allowMaximumSizeToDivergeFromCoreSize爲true,那麼coreSize就不等於maxSize,此時線程池大小是可以動態調整的,可以獲取新的線程,也可以釋放一些線程,如果coreSize < maxSize,那麼這個參數就設置了一個線程多長時間空閒之後,就會被釋放掉

    HystrixThreadPoolProperties.Setter().withKeepAliveTimeMinutes(int value)
    
  4. allowMaximumSizeToDivergeFromCoreSize
    允許線程池大小自動動態調整,設置爲true之後,maxSize就生效了,此時如果一開始是coreSize個線程,隨着併發量上來,那麼就會自動獲取新的線程,但是如果線程在keepAliveTimeMinutes內空閒,就會被自動釋放掉,默認是fales

    HystrixThreadPoolProperties.Setter().withAllowMaximumSizeToDivergeFromCoreSize(boolean value)

可能在生產環境我們需要查看某個接口服務的高峯QPS來配合調整這些參數

發佈了85 篇原創文章 · 獲贊 12 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章