需求描述
opentpopentp需求约 631 字大约 2 分钟
项目背景
解决线程池执行的黑盒问题,使得可以透明的查看线程池运行情况,并通过阈值设置配置线程池运行异常告警。
需求说明
客户端
- 客户端提供 spring starter 和 java 客户端,业务方通过引用依赖,可以进行线程池管理配置
- 先期使用 Executors.newScheduledThreadPool()来进行线程上报,后期可以改成时间轮算法。
- 客户端需要一个守护线程,定时监测上报线程的运行情况,如果断开连接了,则需要定时去重连。后期也改成时间轮算法实现。
- 客户端连接到服务端,需要先通过 AppKey 和 AppSecret 进行鉴权。
服务端
- 服务端能够接收客户端发来的线程信息,先期保存在内存中,后续可以选型一个合适的内存数据库。
- 服务端连接后,需要保存客户端的信息(业务集群名,业务机器IP,实例PID,线程池名)以及对应的 channel。 为了防止一台机器部署多台的情况。
- 服务器端提供前端页面,能够查询当前线程的运行情况。
- 服务器针对某个集群的某个机器IP或者PID的某个线程池能够配置告警策略。
- 支持集群级别的某个线程告警配置,也支持单个机器上的某个线程池配置。
- 支持线程池告警策略的默认配置。
- 在1.中上报的线程池信息到达阈值之后出发告警。
- 可以支持多种告警方式,并提供告警SPI。
- 提供完整的单测和集成测试,提高代码测试覆盖率。
- 线程池数据监控支持使用 promethus 和 grafana。
- 支持线程完成 TP99、 TP999 等信息的上报。
- 集群要能够自动发现并加入集群。
- 客户端信息要同步到集群内所有的机器上。
- 4 中配置的告警策略,要通过协调节点,同步到集群各个服务中。
- 使用netty实现客户端和服务端的网络链接。
- http服务使用 vet.X。
- 服务器提供人员注册接口,要支持 SPI。
- 如果业务要接入服务,需要先申请 AppKey 和 AppSecret。
- 如果有新连接到来,要先进行鉴权。