工艺流程改进在告警采集系统性能优化中的应用
摘要:本文主要是研究工艺流程改进,在告警解析系统性能优化中的应用与实现。其主要目标是使告警解析系统,通过工艺流程的改进来提升系统处理告警效率,提高产品质量,改善用户体验。在系统的实现过程中,对关键问题进行重点分析并制定了解决方案。
关键词:告警风暴;动态解析;正则编译
中图分类号:tp393 文献标识码:a 文章编号:1007-9599 (2013) 02-0000-02
针对“srch模块调用sql”的数据库效率问题,在实现的过程中采用动态解析sql原始配置文件,主要着重设计如何将伪sql代码解析成标准sql语言的设计过程和优化odbc处理数据访问的工艺流程。针对“频繁的正则校验匹配”这一问题的解决分为两部分,一是梳理全局业务,通过对正则表达式调用的关系,到关键点,实施正则编译全局化;二是梳理调用的配置ini文件,将频繁重复出现的正则校验,通过改造工艺流程简化编译频度。
以上两点是直接影响解析效率的关键所在,通过改造sql的工艺流程,可以提高系统在调用sql执行工作效率。同时对业务工艺流程的改进,对正则编译的处理,也带来非常可观的告警性能提升。
针对以上问题提出设计整改思路,发现有以下技术难点:(1)正则函数的跨平台选择:针对于unix系统和linux系统上,正则匹配函数regcmp和regcomp的使用是不相同的,并且其实现方式也不同。因此在考虑正则解析函数时,需要具体分析适当的正则函数,并且修改其实现方式。(2)设计以数组的方式,存放regcmp的编译结果,通过传递地址的方式,实现一处编译,可反复被调用。从而大大节省正则匹配速率。(3)修改代码中针对正则匹配的业务逻辑,将混杂在代码中的正则匹配方法,进行清理分割,重新生成业务逻辑函数。(4)动态解析伪sql,将用正则描述的sql变量,转换成sql占位符的描述方式。期间针对各种五花八门的写法,通过位移指针技术,结合严谨的设计思路,才能细致准确的解析成功。(5正则匹配关键词)以c++数组作为绑定变量参数的地址进行全局化传递。这样就可以利用c++的指针操作,将参数化后的sql绑定功能改进,从而实现全局化可控造作。(6)针对sql的返回值特性,利用odbc的sqlbindcol方法,结合指针技术,实现返回值地址的全局化配置。
为实现系统的性能优化工作,通过的工艺流程改造,实现性能提升。从前期的分析调研中发现,主要的工作流程包含两个主要部分,分别是sql的操作和regex的操作。为系统性能优化工作,对这两部分的工艺流程改造,需要完成以下工作:
1)配置文件中“srch”模块,对于sql的定义部分。(1)sql硬编码:修改对于sql的硬编码流程,采用全局化
预制sql动态编译方式。因此需要对流程做较大改动。(2)绑定变量:对配置文件中的sql伪代码解析,sqlbindparameter采用成员参数地址传递方式。(3)praparesql:对于绑定变量的sql执行全局化prapare,修改调用工艺流程中sqlbindcol执行的有效位置、绑定返回值全局化地址。
2)正则匹配的流程改造,对整体的性能优化起到关键作用。(1)正则编译全局化:对于重复或者经常被调用的正则表达式,采用全局化统一编译,通过工艺改造实现告警匹配的处理效率提升;(2)工艺流程改造:针对配置文件纷繁复杂的正则表达式,以及繁琐的调用逻辑,梳理简单高效可拓展的流程调用。
针对系统采用上述方案进行优化后,相同方案亦可以在现有的其它c++系统上,其应用大都采用数据操作和正则操作。此设计方案对于横向推广具有深远意义。
1 系统的sql数据查询
系统是通过odbc与数据库进行通信的,因此系统的数据操作,必将严格按照odbc的api规范进行创建和使用。但是odbc的api纷繁复杂,如果有效的利用和实现api模块,将对数据操作的效率有着积极的影响。通过前期对系统的分析,也正是发现已有系统存在这部分的工艺流程问题,特此提出对其性能改造。其关键解决方案也正是对odbc的api模块调用,进行流程改造。
odbc操作数据库的api主要有以下几个模块(如图1所示),从图1中可以看出odbc包含的主要api结构模块,通过这些模块的调用可以是先链接数据库、执行sql语句的操作。但是如何合理的利用这些模块,适合的工艺流程将对系统处理数据的性能产生深远的影响。
最终针对系统的优化工作,数据查询模块的工艺流程改造,要充分利用odbc3.0的设计思想,将重复调用的sql语句利用参数绑定等手段利用起来。细节上调优绑定参数、绑定返回记录集的流程。从而大幅度提高系统对于sql模块的使用效率。
2 系统的正则匹配
系统从解析的角度来看,也可以看作是正则匹配的应用系统。所有的关键业务处理方法,都是通过正则匹配来实现的。而实现的逻辑就是从配置文件中,读取正则表达式,然后系统进行编译、匹配。
这里由于针对某一类告警,的配置文件描述的正则表达式,是不会随着告警量的上升而改变的。因此我们可以将这种动态表达式库的工艺流程进行改造,将动态编译的表达式转换为内部表示(被c++编译器编译成了机器码)。我们称之为静态正则表达式库。这样我们得到的业务处理流程,在告警循环接入后,只需要匹配内部表示,而不需要在编译重复的表达。而设计思想就是将配置文件中的正则表达式,一次性读入,然后以
全局变量对其进行编译存储。而原系统需要正则匹配模块功能时,仅需要将存储编译后的表达式进行提取,然后匹配。这大大提升了的系统性能。
告警分析模块是整个系统的工作核心,也是系统性能优化的重中之重,告警分析模块的性能提升将直接影响整体系统的处理效率。对系统进行工艺改造后,将整个系统的核心模块“告警分析”做了优化工作,将频繁冗余调度的正则编译工作、sql硬解析编译工作转移到循环体之外。通过全局化手段和一些技术策略,对告警分析模块“瘦身”。通过这样一种流程改造后,经过测试系统的优化后效率得到明显提升。
参考文献:
[1][美]richardmcdougall,solaris内核结构第二版[m].北京:机械工业出版社,2008.
[2]侯捷,孟岩,译.c++标准程序库[m].北京:华中科技大学出版社,2009.
[3][美]w.richardstevens.unix环境高级编程[m].北京:人民邮电出版社,2007.
[4][美]bruceeckel,chuckallison.c++编程思想[m].北京:机械工艺出版社,2011.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论