数据采集器-架构介绍
2017-01-11 10:54
232 查看
说点事
说说数据采集的流程
数据采集一般是一个从硬件设备收集到数据,然后对对数据进行解析处理,归类,入库,供查询使用。说说踩过的坑
坑1:java多线程并发数量以及tcp粘包问题由于数据采集是通过tcp进行链接,一个请求成功后需要建立专门的线程进行处理前期用BIO+线程池,发现线程池很容易被吃满,导致cpu与内存被迅速耗尽,后来换成BIO,效果不是很明显;
在数据发送过程中,数据量过大,时常过短,容易造成tcp粘包,数据过大,在弱网环境下容易造成丢包,此时需要对数据进行分包,拆包处理
坑2:混乱的业务处理逻辑
指令有很多条,前期工作比较混乱,主线程中各种if else ,没有对业务逻辑进行抽象,正确的使用设计模式,代码耦合度较高,后期代码维护比较困难,只能重构
坑3:响应时间过长导致数据重传
由于在线程中对数据进行业务查询,响应时间短,造成数据多次重传
埋坑
埋坑1:java多线程并发数量以及tcp粘包问题对于线程优化不是那么easy,就选择了netty,选择netty的原因,请参考 http://netty.io/ .在项目中netty做为网络连接层,接收数据后交给专门的handler进行处理
埋坑2:混乱的业务处理逻辑
先说一下数据处理的流程,
网络层接收数据
接收到数据后进行拆包处理
拆包完成后对数据进行校验
校验完成后获取指令
对指令数据集进行处理
处理完成后返回数据结果
流程是固定不变的,在有的流程中相当死板,有的则需要灵活处理,这死板的写到一个方法里就好了,而那些灵活多变的则需要进行抽象。
在这个过程中会用到模版+策略+工厂的设计模式,后面会作为重点内容仔细讲解。
埋坑3:响应时间过长导致数据重传
繁重的业务逻辑处理占用了大量的时间,此时可以把数据解析成相应的数据结构里边,放到消息队列中,交给其他机器进行处理,你可能会用放到消息队列里边客户端咋知道数据处理的对不对,我只能这么说,服务器会告诉客户端你传送的数据都是正确的,都成功了,但具体是不是符合业务逻辑,你再来查询一下吧
架构介绍
数据采集器架构图
名次解释
客户端与服务器连接的硬件设备
netty
tcp数据链接框架,主要对保持与客户端的tcp链接并进行数据解包
数据前置处理
校验数据的合法性,满足基本的协议要求
数据反馈
对数据进行处理,以满足交互协议
数据处理层
根据不同的指令代码解析成对应的类
指令码
每条指令都对应唯一的指令码
解析类
每条指令最好对应一个解析类,对指令进行专属解析
消息队列
本项目采用rabbitmq 请参考 http://www.rabbitmq.com/
数据持久化层
本项目采用mysql
数据后置处理
对数据采集器采集的数据根据业务逻辑进行相应的处理
步骤介绍
1客户端向服务器发送数据,并接受数据,数据一般是经过16进制编码的数据血压数据
开始码(两位) 指令码(两位) 机器编号 (九位)高压(三位)低压(三位)心率(三位)上传时间(十二位)
10进制 &123456789140080060201606011002@
& (开始码)(指令码16进制02,字符无法打印)123456789(机器编号)140(高压) 080(低压) 060(心率) 201606011002 (上传时间) @(结束码)
16进制 26 02 31 32 33 34 35 36 37 38 39 31 34 30 30 38 30 30 36 30 32 30 31 36 30 36 30 31 31 30 30 32 40
2将netty解包完成的数据交给数据前置处理,对数据进行校验
3将校验通过的数据交给数据处理层,对数据进行处理
4 将数据交给特定的解析类
5 解析类数据解析
比如将上边的血压数据 解析为 driverNumber=02,code=123456789,up=140,down=80,bp=60,uptime=201606011002 对应的实体类
如果业务处理时间不复杂,可以在此进行简单的业务逻辑处理
6将转为成json的数据放到消息队列,让消息做异步处理
7异步消息队列将数据交给数据业务逻辑处理类
8处理完成的数据保存到数据库
9向合作方推送数据
10对数据库中的数据进行查询
11将数据交给数据反馈层处理
12处理完成的数据交给netty,供netty返回给客户端
注意:以前写的数据采集太过笼统,最近准备重新编写,如果需要,请加QQ 1217099568,并标注数据采集
git地址 https://github.com/qzshiyongjie/DataCollector相关文章推荐
- w3c技术架构介绍
- MCU 架构介绍
- 软件的架构与设计模式之模式的种类介绍
- strtus整体架构及核心标签库介绍
- 让我介绍MySQL Master-Slave架构下使用MMM的必要性
- 一个自己写的组件--异常报告(1):组件介绍与简单架构
- JDO架构介绍
- 全新Web开发风格-REST架构介绍
- 全新Web开发风格-REST架构介绍
- AccEAP架构介绍(1)---实体的设计
- 补充ruby on rails的相关介绍并对比J2EE分析其架构
- 全新Web开发风格-REST架构介绍
- 介绍一种有效的临时文件处理架构
- 一个容易理解的三层架构的介绍
- 基于C/S的4层架构 —— ESFramework介绍之(6)
- w3c技术架构介绍
- 对 JDO 的架构作一个简单的介绍
- WSSv3的权限架构介绍
- 一个容易理解的三层架构的介绍
- w3c技术架构介绍