美團動態線程池思路開源框架
推薦一款 GitHub 熱門動態線程池框架,功能齊全並附帶前端控制檯。
累計 3.8K+ Star,共計 18+ 公司部署生產穩定運行,有需求可放心使用。
01
線程池痛點
線程池是一種基於池化思想管理線程的工具,使用線程池可以減少創建銷燬線程的開銷,避免線程過多導致系統資源耗盡。在高併發以及大批量的任務處理場景,線程池的使用是必不可少的。
如果有在項目中實際使用線程池,相信你可能會遇到以下痛點:
-
線程池隨便定義,線程資源過多,造成服務器高負載。
-
線程池參數不易評估,隨着業務的併發提升,業務面臨出現故障的風險。
-
線程池任務執行時間超過平均執行週期,開發人員無法感知。
-
線程池任務堆積,觸發拒絕策略,影響既有業務正常運行。
-
當業務出現超時、熔斷等問題時,因爲沒有監控,無法確定是不是線程池引起。
-
原生線程池不支持運行時變量的傳遞,比如 MDC 上下文遇到線程池就 GG。
-
無法執行優雅關閉,當項目關閉時,大量正在運行的線程池任務被丟棄。
-
線程池運行中,任務執行停止,懷疑發生死鎖或執行耗時操作,但是無從下手。
02
什麼是 Hippo-4J?
Hippo-4J 通過對 JDK 線程池增強,以及擴展三方框架底層線程池等功能,爲業務系統提高線上運行保障能力。
提供以下功能支持:
-
全局管控 - 管理應用線程池實例。
-
動態變更 - 應用運行時動態變更線程池參數,包括不限於:核心、最大線程數、阻塞隊列容量、拒絕策略等。
-
通知報警 - 內置四種報警通知策略,線程池活躍度、容量水位、拒絕策略以及任務執行時間超長。
-
運行監控 - 實時查看線程池運行時數據,最近半小時線程池運行數據圖表展示。
-
功能擴展 - 支持線程池任務傳遞上下文;項目關閉時,支持等待線程池在指定時間內完成任務。
-
多種模式 - 內置兩種使用模式:依賴配置中心和無中間件依賴。
-
容器管理 - Tomcat、Jetty、Undertow 容器線程池運行時查看和線程數變更。
-
中間件適配 - Dubbo、Hystrix、Polaris、RabbitMQ、RocketMQ 等消費線程池運行時數據查看和線程數變更。
03
快速開始
以下例子以 hippo4j-server 方式演示,依賴配置中心方式請參考官網。
使用 Docker 一行命令運行服務端。
docker run -d -p 6691:6691 --name hippo4j-server hippo4j/hippo4j-server
Maven 配置 hippo4j SpringBoot Starter 座標。
<dependency>
<groupId>cn.hippo4j</groupId>
<artifactId>hippo4j-spring-boot-starter</artifactId>
<version>${latest version}</version>
</dependency>
代碼中配置動態線程池配置。
@Configuration
@EnableDynamicThreadPool
public class DynamicThreadPoolConfig {
@Bean
@DynamicThreadPool
public ThreadPoolExecutor messageProduceDynamicThreadPool() {
return ThreadPoolBuilder.buildDynamicPoolById("message-produce");
}
}
通過上述這些簡單配置,即可使用線程池參數動態變更、運行時報警以及運行時數據監控等特性。
參數動態變更
如果應用是集羣部署,hippo4j 可以選擇修改線程池某一實例,或者修改集羣全部實例,運行時生效,不需要再重啓服務。
運行時報警
hippo4j 支持釘釘、企業微信和飛書軟件通知,線程池任務運行超時報警示例:
運行時監控
使用三方中間件 Prometheus + Grafana 或 ElasticSearch + Grafana 採集和監控。
三方框架中間件線程池適配
hippo4j 的目標是兼容所有框架的線程池,並可以提供監控和動態修改的能力。
目前已支持的三方框架線程池列表:
-
RabbitMQ
-
Apache RocketMQ
-
Apache Dubbo
-
Alibaba Dubbo
-
SpringCloud Stream RocketMQ
-
SpringCloud Hystrix
-
Tencent Polaris
-
Tomcat
-
Jetty
-
Undertow
支持上述框架線程池的動態變更參數和監控功能,比如:
04
開源地址
Site:https://hippo4j.cn
GitHub:https://github.com/opengoofy/hippo4j
贈人 Star,手留餘香~
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/JTTwcBEiK_MnFcPTZl3zGA