针对影响电动葫芦能效的因素属于多维关系矩阵,为了便于分析能效数据、建立统计模型以及指定能效分级标准等,本文提出了基于HBase存储多维因素数据的后端数据管理系统设计方案,运用优化配置的MySQL以及Redis分别存储常规数据以及热点数据。本文设计后端系统结合服务化与微服务的优点,采用Spring Boot + MyBatis架构,按功能划分为公共模块子系统(权限、消息、日志、配置、文档等)与业务子系统(架构、任务调度、RPC、部署等),在保证健全性的同时,使得系统耦合度最低,可扩展性得到保障。最后,后台压力测试、数据库性能测试、HBase性能对比测试的结果展现出了管理系统的优化设计效果,系统可满足不同型号电动葫芦多种测试条件的能效检测的信息管理需求,为能效数据分析提供支持。 The factors affecting the energy efficiency of electric hoist belong to the multidimensional relation-ship matrix. For subsequent data analysis, statistical model and energy efficiency grading standard, this paper proposes a web data management system design using HBase to store multi-dimensional factor data. Simultaneously, MySQL and Redis are used to store regular data and hotspot data respectively. Combining the advantages of service and micro-services, the web back-end system in this paper adopts the SSM architecture, and divides the functions into common module subsystems (permissions, messages, logs, configurations, documents, etc.) and business subsystems (architecture, task scheduling, RPC, deployment, etc.). While ensuring soundness, the system coupling degree is the lowest and the scalability is guaranteed. Finally, the results of back-end system stress testing, database performance testing and HBase performance comparison testing show the optimal design effect of the management system. The system can meet the information management requirements of energy efficiency testing of various types of electric hoist in various conditions, and provide support for energy efficiency data analysis.
梅俊1,王松雷2,章国宝1
1东南大学自动化学院,江苏 南京
2江苏省特种设备安全监督检验研究院无锡分院,江苏 无锡
收稿日期:2018年12月31日;录用日期:2019年1月15日;发布日期:2019年1月22日
针对影响电动葫芦能效的因素属于多维关系矩阵,为了便于分析能效数据、建立统计模型以及指定能效分级标准等,本文提出了基于HBase存储多维因素数据的后端数据管理系统设计方案,运用优化配置的MySQL以及Redis分别存储常规数据以及热点数据。本文设计后端系统结合服务化与微服务的优点,采用Spring Boot + MyBatis架构,按功能划分为公共模块子系统(权限、消息、日志、配置、文档等)与业务子系统(架构、任务调度、RPC、部署等),在保证健全性的同时,使得系统耦合度最低,可扩展性得到保障。最后,后台压力测试、数据库性能测试、HBase性能对比测试的结果展现出了管理系统的优化设计效果,系统可满足不同型号电动葫芦多种测试条件的能效检测的信息管理需求,为能效数据分析提供支持。
关键词 :数据采集,后台服务,存储优化,HBase
Copyright © 2019 by authors and beplay安卓登录
This work is licensed under the Creative Commons Attribution International License (CC BY).
http://creativecommons.org/licenses/by/4.0/
特种设备的能源消耗巨大,近年来国际上对于特种设备的能效监管与检测极为重视。作为特种设备重要的组成部分,起重机械关于能效测试、能效分级等仍没有确立非试行的统一规范或标准 [
应江苏省特种设备检查监督研究院无锡分院的要求,进行电动葫芦的能效测试及能耗分级,能效影响因素涵盖多类:电动葫芦型号(电机、电气、机械传动部分)、电机运行状态(运行速度、电机功率)、测试环境(不同工作级别、起重量、起升高度)等 [
本文设计系统基于Maven构建、Jenkins作为持续集成,项目后端使用Spring Boot (Spring + Spring MVC) + MyBatis框架搭建,去除XML配置;项目前端基于Angular JS + Bootstrap + jQuery框架,使用Thymeleaf模板引擎生成复用静态页面。后端系统采用微服务化的特点 [
图1. 能测数据管理系统组件图
业务子系统包括SSM架构、任务调度模块、RPC调用模块、部署模块以及数据解析模块。各模块对应技术组件以及功能实现见表1。
模块 | 组件 | 功能实现 |
---|---|---|
架构 | SSM | 详见2.1.1小节 |
任务调度 | Spring Scheduled | 结合cron表达式注解定期采集特定检测周期数据 |
RPC | Dubbo [
|
使得主业务子系统调用额外部署的远程模块,如数据分析模块等 |
部署 | Nginx + keepalived | 详见2.1.2小节 |
数据解析 | FastJson | 序列化与反序列化json,使用Fast Json Http Message Converter,提高JSON序列化速度 |
表1. 业务子系统各模块功能实现表
SSM框架是Spring MVC,Spring以及MyBatis的整合,属于MVC设计模式,系统架构按层次、模块划分,其中,Spring MVC主要转发请求、分派视图,Spring处理请求,MyBatis持久化数据对象。能测数据管理系统基于此架构设计,架构层面较为突出的特点如下:
1) 使用Model、Mapper、MapperXML、Service、ServiceImpl、Controller等后缀名命名模型层、持久层、控制层基础代码,使得代码结构清晰、层次分明;
2) 基于Spring注解,统一管理各Exception类型、创建Rest风格Controller、AOP切面处理事务等,去XML配置,配合注解模块化统一管理异常、Controller业务方法Bean、事务管理器等;
3) 持久化集成MyBatis、通用Mapper组件、Page Helper物理分页组件,减少单表业务SQL开发量。
负载均衡使用nginx分发数据包与请求,同时实现主从热备;通过使用keepalived检测nginx状态从而达到高可用(HA, High Availability)的目的,nginx与keepalived之间的关系如图2。
图2. Nginx + keepalived组件关系图
本文应用部署时使用虚拟IP (VIP)作为用户访问、内部访问的统一入口,nginx配置具体路由,外界通过虚拟IP访问具体Nginx服务器,keepalived配置后,nginx-master会向nginx-slave持续发送心跳,此心跳信息表征nginx-master的状态,从而保证Nginx的高可用。
公共模块子系统包括权限模块、配置中心模块、图表显示模块、消息模块、推送模块、日志模块、文档模块以及存储模块。各模块对应技术组件以及功能实现见表2。
模块 | 组件 | 功能实现 |
---|---|---|
权限 | Shiro | 详见2.2.1小节 |
配置中心 | Apollo | 管理多维因素数据、常规数据、热点数据所在的数据库服务器地址 |
图表显示 | d3 | 图表组件实时显示采集能效相关数据 |
消息 | Rabbit MQ | 详见2.2.2小节 |
推送 | netty-socketio | 基于Netty框架的Socket.io服务器端的java实现, 允许客户端无请求的情况下在服务器端主动推送检测任务流程 |
日志 | SLF4J + Log4j2 | 业务日志和调试日志分开打印,同时基于时间和文件大小分割日志文件 |
文档 | Swagger2 | Swagger2生成RESTful APIs文档 |
存储 | HBase等 | 具体实现与优化详见第三章 |
表2. 公共模块子系统各模块功能实现表
Apache Shiro支持认证、授权、加密和会话管理,能测数据管理系统通过实现Realm定义系统内部的权限规则,Security Manager通过从Realm获取用户的信息与权限认证验证Subject。下述是权限模块的核心功能以及实现:
1) 使用配置文件定义Realm进行用户登录、URL权限管理;
2) 常规方案仅使用Redis存取会话信息,本文使用Shiro session配合Redis实现“安全型”会话管理。引入spring-session-data-redis,@Enable Redis Http Session配置session过期时间,redis缓存会话数据实现分布式session同步,重启服务会话不丢失。
消息中间件采用RabbitMQ [
存储模块主要包括多维因素数据(机械传动部分、电机运行特性、测试环境等因素) HBase存储、常规数据(电动葫芦基本信息注册数据、多种检测任务周期信息等) MySQL存储以及热点数据(检测任务周期的实时数据) Redis存储,实际部署环境拓扑图如图3。
图3. 部署数据库拓扑图
HBase是一个列存储、多维度 [
列存储中查询中的索引规则是通过列来定义,因此HBase中数据本身即索引,每次查询只会访问涉及的列,极大的降低了IO操作频率,同时,每一列的字段数据类型一致,列聚集存储可以进行高效压缩,节省物理空间。能效数据统计模型、能效分级等数据分析需求的数据量较为庞大,出于存储、索引性能、多维因素存储的考虑,HBase成为最佳选择。能测信息管理系统整合HBase存储多维因素数据步骤如下:
1) 在Spring Boot中引入hbase-client以及spring-data-hadoop依赖;
2) 设置好quorum与port后,配置Hbase Properties与HBase Configuration获取Hbase Template与Connection实例;应用Connection实例,获取表名称(
3) 调用HBase Service类创建表,列族(含有多个列标识)对应机械传动部分因素(电动葫芦型号、电机、传动摩擦)、电机运行状态(运行速度、电机功率)、测试环境(不同工作级别、起重量、起升高度)。
为了便于展示列族与列标识,针对Row Key为id1时,展开列族的数据结构见表3。
TableName | Row Key | Column Family | Column Qualifier |
---|---|---|---|
multid_factor | id1 | mechanical | type, motor, friction |
electrical | speed, power | ||
environmental | level, weight, height |
表3. 多维因素数据表的列族属性
多维因素数据表multid_factor数据模型见表4。
Row Key | timestamp | Column Family: mechanical | Column Family: electrical | … | |||
---|---|---|---|---|---|---|---|
column: type | column: motor | column: friction | column: speed | column: power | … | ||
id1 | 1539576300 | {type:, motor:, friction:} | {speed:, power:} | … | |||
id2 | 1539576330 | … | … | … | |||
… | … | … | … | … | |||
表4. HBase多维因素数据表multid_factor
优化配置措施:
1) 由于过多的Column Family之间会互相影响,本系统限制每张表列族不超过4个;列族名、列标识名的长度影响I/O读写的性能以及发送的数据量,设置简洁。
2) Row Key是HBase的key-value存储中的key,HBase通过对Row Key按字典序(存储排序)来建立索引,本系统考虑存储数据scan范围较大的特点采取散列字段(高2个字节,0~65,535程序循环产生)+时间字段(低4个字节,保留小时分钟毫秒)的组成方式优化Row Key的Hash以获得固定长度的Row Key,使数据分布均匀,均衡负载。
MySQL是一个关系型数据库管理系统,表结构涉及字段名称、字段类型、字段长度、是否为空、主键;表操作支持insert、delete、update、select (条件、排序、分组、多表等);支持事务以及配置事务粒度;表间关系支持多种关联映射;表数据有多种约束类型,如primary key(PK)、unique等。
能测信息管理系统使用MyBatis及相关组件整合MySQL步骤如下:
1) 在Spring Boot中引入mybatis-spring-boot-starter,添加mysql、jdbc相关依赖spring-boot-starter-jdbc、mysql-connector-java;
2) 配置MySQL远程地址、登录信息、驱动名称、线程池信息等;
3) 创建常规数据(检测执行人、检测时间、工作周期等基本信息)、实时热点数据(时间、高度等)的实体类,创建数据操作相关方法的接口Interface,使用通用Mapper组件配置生成对应的MapperXML进行数据库CRUD操作,使用PageHelper组件实现物理分页;同时,可以创建Service进一步封装上述的数据操作相关方法,对外仅暴露Service,降低系统模块耦合度;
4) 开启事务,方法级别指定事务管理器,配置事务传播行为、隔离级别、读写类型等;
检测任务相关信息表detect_info数据模型见表5。
名称 | 类型 | 长度 | NULL | PK | 数据举例 |
---|---|---|---|---|---|
id | int | 11 | not null | primary key | {1,2,3,4,…} |
execStaff | varchar | 24 | null | no | {甲|乙|丙|…} |
workLevel | string | 10 | null | no | {M1|M2|…|M8} |
operationSpeed | string | 10 | null | no | {Single|Double} |
updateTime | date | default | null | unique | {3.24,4.19,5.27,4.28,…} |
表5. 检测任务相关信息表数据模型
优化配置措施:
1、使用Druid Spring Boot Starter集成Alibaba Druid数据库连接池与监控,Druid数据库连接池,监控数据库访问性能,统计SQL的执行性能。
2、AOP切换多数据源数据库,实现读写分离。
3、@Transational注解事务,实现非侵入式的方法级别的事务回滚。
Redis是一款支持String、List、Hash、Set、Sorted Set数据类型的内存高速缓存数据库,key-value存储类型使得数据查询性能极高,支持主从模式,支持持久化,支持事务,set/get、add/remove等都是原子操作。
管理系统使用Redis存储检测任务周期的实时数据,用以图表显示、即时分析、能效计算等,并设置key的过期时间为检测周期的2倍,过期之前不采用redis持久化,而是转存于MySQL成为常规历史检测数据;系统以主备方式保证Redis的High Availability,redis-master以异步rehash的方式保证redis-slave数据同步,实现数据最终一致性。
能测信息管理系统整合Redis步骤如下:
1) 基于Spring Boot架构,使用spring-boot-starter-data-redis引入redis;
2) 添加配置文件,设置spring.redis.host、spring.redis.port等Redis服务器与连接池信息;
3) 使用RedisTemplate进行set、get、add、remove、hasKey等操作。
数据模型见表6。
Key | 类型 | 操作 | 子系统下指标常权 |
---|---|---|---|
execTimeSec | list | lpush | {3.00,15.00,18.00,…} |
workLevel | string | set | {M1|M2|…|M8} |
operationSpeed | string | set | {Single|Double} |
height | list | lpush | {3.24,4.19,5.27,4.28,…} |
表6. Redis存储的数据类型
优化配置措施:
1、redis-master不做任何持久化工作,转存至MySQL代替RDB内存快照、AOF日志文件。
2、主备方式代替主从方式,对外提供一个虚拟IP(VIP),keepalived保证Redis HA,WEB app通过VIP进行存储操作,正常时主机redis-master提供服务,宕机时VIP自动漂移到备机redis-slave上;另外,主备数据同步使用异步同步,在性能得到保证的同时,最终一致性已足够需求。
后台完整测试一般需涵盖工具类等方法测试、Controller类等RESTful API请求测试以及并发访问压力性能测试。其中基本方法测试基于Junit4,RESTful API测试基于Mock技术,性能、效率测试基于ContiPerf。
能测信息管理系统基于ContiPerf进行性能测试步骤如下:
1) 在dev环境下引入org.databene.contiperf组件进行性能测试;
2) 使用注解@PerfTest (invocations = 100, threads = 10)设置启动10个线程执行任务100次;
3) 运行测试,访问:target/contiperf-report/index.html。
得到ContiPerf报表如图4。
图4. ContiPerf性能测试报告
图4中throughput显示每秒执行任务次数162次,平均响应时间为0.041 s,性能满足需求。后端系统使用内嵌的Tomcat作为Servlet容器,启动ContiPerf测试后用VisualVM查看应用所占的资源情况如图5。
图5. VisualVM监控信息
如上图所示,ContiPerf开启测试后,Daemon threads后台线程10个,使用的堆内存为约90MB,对于资源使用情况符合预期。
Apache JMeter是一款开源的压力测试工具,支持数据库、http请求等的压力测试,同时也支持混合应用场景多线程组并发测试,本文使用JMeter进行数据库压力测试,步骤如下:
1) 新建测试计划,添加线程组,设置线程数100;
2) 添加JDBC Connection Configuration,设置待测远程数据库服务器地址以及登录信息;
3) 添加JDBC Request,设置待测select语句,本次测试以单表条件查询为例,select id, workLevel from detect_info where DATE(updateTime) >= DATE('2018-10-15') limit 15;
4) 添加监听器,依次添加察看结果树与聚合报告;
配置完成,执行测试后,聚合报告结果如图6。
图6. JMeter聚合报告压力测试结果
如图6所示,总的select语句请求数Samples为34158条,Average平均响应时间为0.079s,Error%测试出现的错误请求数百分比为0.06%,Throughput(TPS,吞吐量)每秒处理的请求数243.2条,能承受较大的并发请求量。
针对既有的检测数据ER模型管理系统解决方案 [
对于本文设计的HBase多维因素数据表multid_factor,使用“Yahoo!CloudServing Benchmark(YCSB)”进行其数据服务性能基础测试,步骤如下:
1) 配置workload类型为workloadb,即Read mostly workload;
2) 设置load初始化Hbase表数据“./ycsb load hbase10-P../workloads/workloadb-p threads = 100-cp /etc/hbase/conf-p table = multid_factor-p columnfamily = mechanical-p columnfamily = electrical-p columnfamily = environmental-p recordcount = 10000-s > ./load.report”;
3) 运行负载测试“./ycsb run hbase10 …(如步骤2)中所示) -s > ./run.report”。
归纳JMeter聚合报告结果与YCSB命令行返回测试结果报告run.report,得出MySQL常规方案与本文设计HBase多维数据存储方案性能核心指标对比见表7。
DB | 数据量 | 请求类型/数 | 吞吐量(ops/s) | AverageLatency (s) |
---|---|---|---|---|
MySQL | 10,000 | READ/1000 | 144.48 | 0.097 |
HBase | 10,000 | SELECT/1000 | 376.79 | 0.036 |
表7. MySQL与HBase性能核心指标对比表
如表7所示,关于多维的较大数据查询,在相同数据量、请求数、线程数的压测情况下,即使常规方案数据库针对多表的查询数据建立索引,吞吐量以及平均响应时间仍然逊于“数据本身即索引”的HBase多维数据表。另外,在多维因素增加维度的情况下,常规库数据库多表查询的响应时间也会有所增长,而HBase因为本身列存储的性质则不会因为增加列族而变化。
本文基于HBase、MySQL以及Redis分别存储能效检测多维因素数据、常规数据以及热点数据,以SSM架构,结合配置中心、任务调度、日志文档、权限、消息、图表显示、推送等模块,根据配置注册电动葫芦型号以及其历史多维因素数据、常规数据,智能推送合适的检测任务,任务调度适时采集热点数据并实时图表显示,使用的消息队列支持多终端设备同时采集,同时可生成日志报表。该系统设计探讨了多维度数据的存储、索引等优化方案,具有较好的高可用性、可扩展性、高效率等特点,可满足不同型号电动葫芦多种测试条件的能效检测的信息管理需求,为相关人员提供便捷检测与技术支持。
KJ(Y)2015018,江苏省特检院资助项目。
梅 俊,王松雷,章国宝. 基于HBase的电动葫芦能测数据管理系统设计Design of Data Management System for Electric Hoist Energy Efficiency Measurement Based on HBase[J]. 计算机科学与应用, 2019, 09(01): 132-142. https://doi.org/10.12677/CSA.2019.91016
https://doi.org/10.1016/j.procs.2017.12.212