近期在进行主数据治理方案的实施落地,在主数据中存在人员主数据,而人员主数据主要对省内自然人进行记录,涉及数据量上千万条记录数,由于数据量巨大,需要对MDM主数据管理平台、ESB企业服务总线同步接口及集成流程进行测试,验证是否支持大批量数据同步

本次大批量数据同步主要针对1千条、1万条、10万条、100万条、1000万条数据级别进行测试验证,其中1万条及以下采用批量同步方式,而1万条以上采用循环批量同步录入的方式,本文主要对测试方法、调优过程及测试结果分析进行主要说明。

1整体说明

本章主要针对测试的主要内容、测试的ESB应用集成流程具体实现情况以及遇到问题应该如何处理等进行详细说明。

1.1测试思路

在测试时主要针对1千条、1万条、10万条、100万条、1000万条数据级别进行测试验证,测试分为两个模块,具体如下:

1.对环境进行优化,分别优化主数据及ESB的CPU、内存,并对Redis、JVM、CentOS、Nginx等进行优化;

2.对每个数量级进行进行ESB层面测试,先用代码构造对应的入参,再使用ESB数据适配器中的数据插入组件记录每个数量级的同步时间; 

3.复制原有集成流程,加入主数据调度接口进行数据的同步,记录同步时间,并与数据库批量插入同步时间进行对比,查看是否是因为同步接口降低同步时效; 

4.对测试结果进行总结,将相关问题反馈至产品负责人员进行优化,并进行再次测试。 

1.2测试流程 

测试流程主要是针对不同数据量级别对ESB数据插入性能等进行测试,主要测试100W条及1000W条数据的写入测试,具体流程如下: 

1.批量处理具体流程如下: 

MDM大批量数据同步测试验证_数据同步测试

a)初始化操作记录数据起始时间; 

b)查询出1千/1万条数据,并进行记录; 

c)数据库直接批量数据插入; 

d)记录截止时间并进行时间计算。 

2.循环批量处理流程如下: 

MDM大批量数据同步测试验证_主数据治理_02

a)初始化操作记录数据起始时间; 

b)使用Java转换节点构造1万条数据; 

c)数据库直接批量数据插入; 

d)索引自增长并进行循环; 

e)构造集成日志参数并记录流程执行时间。 

1.3结果验证 

对数据执行结果进行分析,与开发人员反馈具体优化点,因为主数据不仅仅是数据的存储,还有数据的展现及分析,需要对人员数据管理进行查看验证,并对涉及人员数据巡检、人员数据分析等功能进行查证,核实是否会因为大数据量导致系统崩溃或者Redis崩溃等情况。 

2性能调优 

性能调优主要对CPU、内存、Redis、JVM、CentOS、Nginx等进行优化,具体优化过程如下。 

2.1内存调优 

调优方面主要使用UMC对主数据、ESB等进行CPU及内存扩充,调整内存为4G—8G,主数据方面: 

MDM大批量数据同步测试验证_主数据治理_03

ESB方面调整同上: 

MDM大批量数据同步测试验证_主数据_04

2.2系统调优 

对CentOS进行调优,调整sysctl.conf文件。 

MDM大批量数据同步测试验证_数据同步测试_05

加入具体的参数及参数说明: 

MDM大批量数据同步测试验证_主数据_06

MDM大批量数据同步测试验证_主数据治理_07

  

接下来使配置文件生效。 

MDM大批量数据同步测试验证_主数据_08

2.3线程池调优 

调整server.xml文件,调整线程池,参数说明: 

1.maxThreads:最大线程数,高并发请求时,tomcat能创建来处理请求的最大线程数,超过则放入请求队列中进行排队,默认值为200; 

2.minSpareThreads:最小空闲线程数,任何情况都会存活的线程数,即便超过了最大空闲时间,也不会被回收,默认值4; 

MDM大批量数据同步测试验证_数据_09

2.4Redis调优 

通过调整Redis配置文件对Redis进行调优。 

MDM大批量数据同步测试验证_主数据_10

添加、修改配置: 

MDM大批量数据同步测试验证_主数据治理_11

需要关闭redis实例节点,重启后生效。 

MDM大批量数据同步测试验证_主数据治理_12

验证方法: 

MDM大批量数据同步测试验证_数据_13

输入“info”命令查看已经改为5G内存,已启用allkeys-lru模式。 

2.5Nginx调优 

Nginx方面调整使用epoll模式、调整最大连接数、超时时间、请求头缓冲区、请求体缓冲区等等。 

MDM大批量数据同步测试验证_数据_14

3实现步骤 

首先创建一个虚拟表用来模拟业务数据,接下来,之后通过数据库读取组件分页获取数据,之后通过循环的方式批量进行数据的插入。 

3.1模拟数据 

首先使用Mysql函数往数据库内插入1000万条数据。 

脚本执行输入插入记录数就可以在上述库内插入对应数据,执行方法如下: 

MDM大批量数据同步测试验证_数据同步测试_15

在max_num插入数据就可以在数据库内插入定量数据。具体详见附件。 

3.2ESB验证 

按照上文测试思路,先对ESB数据写入能力进行验证,数据批量插入流程流程图(以100W数据为例): 

MDM大批量数据同步测试验证_主数据治理_16

流程解读开始: 

1.数据初始化操作:设置变量index索引值,记录流程开始时间; 

2.设置循环1万天,构造参数; 

MDM大批量数据同步测试验证_主数据_17

  

3.数据插入组件,每次插入1万条数据; 

MDM大批量数据同步测试验证_主数据_18

4.Index+1索引自增长,在线上设置循环条件,循环1000次,插入1000万条数据; 

MDM大批量数据同步测试验证_主数据治理_19

5.记录数据执行时间,并插入数据库内流程结束。 

最后直接调用各个流程直接执行即可。 

3.3接口验证 

接口验证主要验证主数据同步接口是否支持数据大批量的同步,如果支持,同步效率如何,对主数据批量同步接口进行验证,流程只是把数据构造替换成数据查询组件,把数据插入组件替换成数据接口即可,具体流程如下: 

MDM大批量数据同步测试验证_数据_20

流程解读开始: 

1.数据初始化操作:设置变量index索引值,记录流程开始时间; 

2.查询数据1W条记录量; 

3.调用主数据大批量同步接口imp-all-fields; 

4.Index+1索引自增长,在线上设置循环条件,循环1000次,插入1000万条数据; 

5.记录数据执行时间,并插入数据库内流程结束。 

最后直接调用各个流程直接执行即可。 

3.4结果对比 

MDM大批量数据同步测试验证_数据同步_21

通过测试结果可以看出调用主数据接口会影响数据同步的速度,同时数据库字段的多少同样也会影响数据同步的速度,可以从数据同步接口进行优化提升同步效率。 

4心得体会 

通过本次的大批量数据同步测试验证使自身在性能调优等方面有了一定的提升,同时也总结了一些心得,现从做事方法、意识形态以及技术积累层面总结如下。 

4.1做事方法 

近期的工作让我认识到:在工作的过程中应该勤与公司领导、同事沟通交互,在遇到困难时应该面对困难,对于问题的解决方法多往前看,积极解决问题,在解决问题的同时,提升自身技术能力。 

4.2意识形态 

通过查阅现有Nginx、Redis等调优的记录文档,发现文档中有一些内容需要进行优化,伴随着自身专业知识不断积累,对知识的认知也不断提高。当回过头来看自己之前记录的工作文档,会发现存在很多漏点,这时就需要再次完善工作文档了。在这个完善的过程中又把初学时的理解和当下进行比较,可以了解到当时的自己有哪些不足,思维逻辑有了怎样改善。技术、认知在不断更新,工作文档也在不断更新,在这个不断迭代更新的过程中,使自己的知识点不知不觉连成了线。 

4.3技术积累 

本次数据同步验证使自身Linux系统调优方面有了一定的提升,同时也暴露了自己在调配置文件不仔细所产生的问题,不能仅停留于敲代码的层面,在日常的工作过程也是一样,在后续的学习工作过程中要避免此类问题发生。 

Linux系统作为目前服务器端最常用的系统,学好它的重要性不言而喻,作为一款字符串操作为主流的系统,想要学好Linux其实并不用容易,想要熟练掌握,也需要投入很多的精力,只有不断地学习积累才能使自身知识体系更加完善。