基于美团动态线程池开发的轻量级线程池框架

基于美团动态线程池开发的轻量级线程池框架

2022-10-10 0 1,033
资源编号 44916 最近更新 2022-10-10
¥ 0人民币 升级VIP
立即下载 注意事项
下载不了?请联系网站客服提交链接错误!
增值服务: 安装指导 环境配置 二次开发 模板修改 源码安装

本期推荐的是一个轻量级动态线程池框架——Hippo4J。

基于美团动态线程池开发的轻量级线程池框架

Hippo4J 基于 美团动态线程池 设计理念开发,针对线程池增强 动态调参、监控、报警功能。

通过 Web 控制台对线程池参数进行动态调整,支持 集群内线程池的差异化配置。内置线程池参数变更通知,以及 运行过载报警 功能(支持多通知平台)。按照租户、项目、线程池的维度划分,配合系统权限,让不同的开发、管理人员负责自己系统的线程池。

自 1.1.0 版本发布后,Hippo4J 分为两种使用模式,用一张图来说明两者的使用差别:

基于美团动态线程池开发的轻量级线程池框架

hippo4j-core

轻量级动态线程池管理,依赖 Apollo、Nacos 等三方配置中心(任选其一)完成线程池参数动态变更,同样包含运行时报警、监控功能。

基于美团动态线程池开发的轻量级线程池框架

hippo4j-server

部署 hippo4j-server 服务,通过可视化 Web 界面完成线程池的创建、变更以及查看,不依赖三方中间件。相比较 hippo4j-core,功能会更强大,但是也引入了一定的复杂性。需要部署一个 Java 服务,以及 MySQL 数据库。

基于美团动态线程池开发的轻量级线程池框架

使用总结

使用建议:根据公司情况选择,如果基本功能可以满足使用,选择 hippo4j-core 使用即可;如果希望更多的功能,可以选择 hippo4j-server。两者在进行替换的时候,无需修改业务代码

hippo4j-core

hippo4j-server

依赖

Nacos、Apollo 等配置中心(任选其一)

部署 Hippo4J Server(内部无依赖中间件)

使用

配置中心补充线程池相关参数

Hippo4J Server Web 控制台添加线程池记录

功能

包含基础功能:参数动态化、运行时监控、报警等

基础功能之外扩展控制台界面、线程池堆栈查看、线程池运行信息实时查看、历史运行信息查看、线程池配置集群个性化等

功能特性

应用系统中线程池并不容易管理。参考美团的设计,Hippo4J 按照租户、项目、线程池的维度划分。再加上系统权限,让不同的开发、管理人员负责自己系统的线程池操作。

举个例子,小编在一家公司的公共组件团队,团队中负责消息、短链接网关等项目。公共组件是租户,消息或短链接就是项目。

  • Hippo4J 除去动态修改线程池,还包含实时查看线程池运行时指标、负载报警、配置日志管理等。
  • hippo4j-auth:用户、角色、权限等;
  • hippo4j-common:多个模块公用代码实现;
  • hippo4j-config:提供线程池准实时参数更新功能;
  • hippo4j-console:对接 Web 前端项目;
  • hippo4j-discovery:提供线程池项目实例注册、续约、下线等功能;
  • hippo4j-spring-boot-starter:负责与 Server 端交互的依赖组件;
  • hippo4j-example :示例工程;
  • hippo4j-server :聚合 Server 端发布需要的模块;
  • hippo4j-tools :操作日志等组件代码。

解决什么问题

线程池在业务系统应该都有使用到,帮助业务流程提升效率以及管理线程,多数场景应用于大量的异步任务处理。

虽然线程池提供了我们许多便利,但也并非尽善尽美,比如下面这些问题就无法很好解决。

  • 原生线程池创建时无法合理评估参数问题。比如功能使用到线程池,遇到突发流量洪峰,频繁拒绝任务。Hippo4J 提供动态修改参数功能,避免修改线程池参数后重启线上应用;
  • 当线程池运行过程中无法再接受新的任务,此时你想知道 线程池内线程都在做什么?Hippo4J 提供查看线程池堆栈功能;
  • 某接口频繁超时,内部依赖线程池执行,想要 查看过去一段时间线程池运行参数情况。Hippo4J 提供历史数据图表查看功能;
  • 原生线程池无任务报警策略。Hippo4J 内置四种报警策略,分别是:活跃度报警、队列容量报警、拒绝策略报警和运行时间过长报警。

Hippo4J 很好解决了这些问题,它将业务中所有线程池统一管理,增强原生线程池系列功能。

架构设计

简单来说,Hippo4J 从部署的角度上分为两种角色:Server 端和 Client 端。

  • Server 端是 Hippo4J 项目打包出的 Java 进程,功能包括用户权限、线程池监控以及执行持久化的动作。
  • Client 端指的是我们 SpringBoot 应用,通过引入 Hippo4J Starter Jar 包负责与 Server 端进行交互。

比如拉取 Server 端线程池数据、动态更新线程池配置以及采集上报线程池运行时数据等。

基础组件

  • 配置中心(Config)

配置中心位于 Server 端,它的主要作用是监控 Server 端线程池配置变更,实时通知到 Client 实例执行线程池变更流程。

代码设计基于 Nacos 1.x 版本的 长轮询以及异步 Servlet 机制 实现。

  • 注册中心(Discovery)

负责管理 Client 端(单机或集群)注册到 Server 端的实例,包括不限于实例注册、续约、过期剔除 等操作,代码基于 Eureka 源码实现。

上面的配置中心很容易理解,动态线程池参数变更的根本。但是注册中心是用来做什么的?

注册中心管理 Client 端注册的实例,通过这些实例可以 实时获取线程池的运行时参数信息。

目前的设计是如此,不排除后续基于 Discovery 做更多的扩展。

  • 控制台(Console)

对接前端项目,包括不限于以下模块管理:

基于美团动态线程池开发的轻量级线程池框架

抽象工具(Tools)

顾名思义就是将某些工具单独抽象出来,并以 Module 的形式进行展现,这样的拆分方式有两点好处:一是更符合职责分离特性,二是需要用到某块功能,做到拿来即用。

log-record-tool:基于 mzt-biz-log (opens new window)的操作日志变更记录组件。

消息通知(Notify)

Hippo4J 内置了很多需要通知的事件,比如:线程池参数变更通知、线程池活跃度报警、拒绝策略执行报警以及阻塞队列容量报警等。

目前 Notify 已经接入了钉钉、企业微信和飞书,后续持续集成邮件、短信等通知渠道;并且,Notify 模块提供了消息事件的 SPI 方案,可以接受三方自定义的推送。

基于美团动态线程池开发的轻量级线程池框架

Hippo4j-Spring-Boot-Starter

熟悉 SpringBoot 的小伙伴对 Starter 应该不会陌生。Hippo4J 提供以 Starter Jar 包的形式嵌套在应用内,负责与 Server 端完成交互。

功能架构

基于美团动态线程池开发的轻量级线程池框架

快速上手

提示:Hippo4J 支持两种运行模式,依赖配置中心(Hippo4J-Core)或 Hippo4J Server,下文描述接入 Hippo4J Server

运行 Demo

Clone Dynamic-ThreadPool 源代码:

https://github.com/longtai-cn/hippo4j

导入 Hippo4J 初始化 SQL 语句:

https://github.com/longtai-cn/hippo4j/blob/develop/hippo4j-server/conf/hippo4j_manager.sql

启动 Hippo4J-Server 模块下 ServerApplication 应用类:

https://github.com/longtai-cn/hippo4j/tree/develop/hippo4j-server

启动 Hippo4J-Example 模块下 ExampleApplication 应用类:

https://github.com/longtai-cn/hippo4j/tree/develop/hippo4j-example

通过接口修改线程池中的配置。HTTP POST 路径:
http://localhost:6691/hippo4j/v1/cs/configs,Body 请求体如下:

{
    "ignore": "tenantId、itemId、tpId 代表唯一线程池,请不要修改",
    "tenantId": "prescription",
    "itemId": "dynamic-threadpool-example",
    "tpId": "message-produce",
    "coreSize": 10,
    "maxSize": 15,
    "queueType": 9,
    "capacity": 100,
    "keepAliveTime": 10,
    "rejectedType": 3,
    "isAlarm": 0,
    "capacityAlarm": 90,
    "livenessAlarm": 90
}

接口调用成功后,观察 Hippo4j-Example 控制台日志输出,日志输出包括不限于此信息即为成功。

[ MESSAGE-PRODUCE] Changed thread pool. 
coreSize :: [2 => 10], maxSize :: [10 => 15], queueType :: [ArrayBlockingQueue => ResizableCapacityLinkedBlockIngQueue], capacity :: [200 => 200], keepAliveTime :: [25 => 10], rejectedType :: [AbortPolicy => DiscardPolicy]

提示:也可以通过 Server 控制台访问,路径:
http://localhost:6691/index.html。

默认用户名密码:admin / 123456

另外,当 Client 集群部署时,可以选择修改所有实例或某一实例。

修改请求路径:
http://localhost:6691/hippo4j/v1/cs/configs?identify=xxx,Body 体同上。

identify:代表客户端唯一标识,参数不传或为空,会修改该线程池 Client 集群下所有线程池实例参数。

—END—

开源协议:Apache-2.0

资源下载此资源为免费资源立即下载

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

七爪网 免费源码 基于美团动态线程池开发的轻量级线程池框架 https://www.7claw.com/44916.html

分享免费的开源源码

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、七爪会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、七爪无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在七爪上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于七爪介入快速处理。
查看详情
  • 1、七爪作为第三方中介平台,依据交易合同(商品描述、交易前商定的内容)来保障交易的安全及买卖双方的权益; 2、非平台线上交易的项目,出现任何后果均与互站无关;无论卖家以何理由要求线下交易的,请联系管理举报。
查看详情

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务