阶段一
接口目的:接口处理机器的进程信息上报
服务器环境: 阿里云 slb ;springboot+tomcat server.tomcat.max-connections:200 ;数据库mysql
接口实现方式:采用同步处理
1.aes 解密
2.hutool 的util 转化json到java 对象
3.接收到请求直接处理业务代码
可承载的客户端数量:8000-9000
阶段二
接口目的:接口处理机器的进程信息上报
服务器环境: nginx;springboot+tomcat server.tomcat.max-connections:200 ;数据库mysql
接口实现方式:采用异步处理
1.aes 解密
2.hutool 的util 转化json到java 对象
3.将接收到的消息直接交给线程任务来处理
4.优化索引
可承载的客户端数量:1.3w -1.9w
阶段三
接口目的:接口处理机器的进程信息上报
服务器环境: nginx;c++ http 网关;springboot+tomcat server.tomcat.max-connections:20000 ;数据库mysql
接口实现方式:采用异步处理
1.aes 解密
2.hutool 的util 转化json到java 对象
3.将接收到的消息直接交给线程任务来处理
可承载的客户端数量:1.9w -2.2w
阶段四
接口目的:接口处理机器的进程信息上报
服务器环境: slb;springboot+tomcat server.tomcat.max-connections:20000 ;数据库mysql
一台slb 后面接着4个tomcat 服务器
接口实现方式:采用异步处理
1.aes 解密
2.fastjson 转化json到java 对象
3.将接收到的消息直接交给线程任务来处理
可承载的客户端数量:2.5w - 7w
阶段五
接口目的:接口处理机器的进程信息上报
服务器环境: slb;springboot+tomcat server.tomcat.max-connections:20000 ;数据存储elasticsearch
一台slb 后面接着7个tomcat 服务器
接口实现方式
1.aes 解密
2.fastjson 转化json到java 对象
3.使用springboot的线程池,核心线程数=cpu核心数
4.调用es的high-level-client rest.bulk 将数据写入到es process-yyyy-MM-dd 索引中
5.对于线程下线的索引,写入到process-end 索引中
6.对于客户机时间不正确的索引,统一将数据写入 process-exception 中
可承载的客户端数量:7w - 11w 每台机器的cpu 稳定在10 %左右 但是数据有一定的延时,
因为虽然是多线程处理数据的写入,但是项目打开连接数会升高,无论配置成多么大的值,在数据没有写入到es 成功并返回
连接就不会标记为断开,后期考虑用空间换时间的模式。 先将数据直接存储到队列中,然后返回给客户端成功
专门有程序来批量的将数据写入的es 中,就是下个版本 阶段六
阶段六
接口目的:接口处理机器的进程信息上报
服务器环境: alb;springboot+tomcat server.tomcat.max-connections:20000 ;数据存储elasticsearch
一台alb 后面接着7个tomcat 服务器
接口实现方式
接口接收到数据以后 直接丢入队列 bigQueue
定时任务每5秒钟执行一次dequeue() 一次dequeue 批量出队100000 条数据
出来的数据进行以下步骤
1.aes 解密
2.fastjson 转化json到java 对象
3.将数据按照上报类型进行分组 分开进程创建和进程退出两个列表
4.按照日期分组,调用es的high-level-client rest.bulk 将数据写入到es process-yyyy-MM-dd 索引中,每次批量写入1000条
5.对于线程下线的索引,写入到process-end 索引中,逻辑和进程创建一致
6.对于客户机时间不正确的索引,统一将数据写入 process-exception 中 process-end-exception 中
可承载的客户端数量:10w - 20w 每台机器的cpu 稳定再5%左右