基于内存数据库的智能化故障处理方法

2017-03-12 20:16周世超
移动通信 2017年2期

【摘 要】为提高实时计费业务的时效性、稳定性与连续性,设计、开发并实现了一套智能化故障处理方法。该方法基于内存数据库架构与特性,提出了新故障处理的方案,实现了对故障监控、预警和处理的智能化。通过数据对比显示,该系统能够显著提高故障处理效率。

【关键词】内存数据库 故障预警 智能化故障处理

doi:10.3969/j.issn.1006-1010.2017.04.000 中图分类号:TP399 文献标志码:A 文章编号:1006-1010(2017)04-0000-00

引用格式:周世超. 基于内存数据库的智能化故障处理方法[J]. 移动通信, 2017,41(4): 00-00.

1 引言

数据库负责数据的存储与处理,在诸如通信行业实时计费业务等对实时性要求非常高的关键业务场景中,内存数据库以其高响应速度、高并发、高吞吐量等优秀特性正得到逐步推广与大规模应用。在利用内存技术提升数据库性能、提高业务系统实时响应能力的同时,對于内存数据库运行稳定性的要求同样不断提高,要求其在出现故障时能够实现快速定位与修复,提高业务的连续性。

2 内存数据库简介

传统的数据库管理系统把所有数据都放在磁盘上进行管理,所以称做磁盘数据库。由于对磁盘读写数据的操作一方面要进行磁头的机械移动,另一方面受到系统调用时间的影响,当数据量很大,操作频繁且复杂时,就会暴露出很多问题。

内存数据库除对内存读写比对磁盘读写快之外,还针对数据库架构与管理方式进行了重新设计,目前几种常见的通用内存数据库,例如Oracle公司的TimesTen,Altibase公司的Altibase,McObject公司的eXtremeDB,均属于关系型内存数据库产品。以下针对两种不同架构的数据库进行对比说明。

传统磁盘数据库检索的基本算法基于硬盘的读写,而内存数据库基于内存实现。内存数据库抛弃了传统的磁盘数据管理方式(如图1所示),基于全部数据都加载到内存的设计理念,对数据库的体系结构进行重新设计,并且在数据组织结构、索引技术、并行操作等方面也进行了相应的改进,数据处理速度比传统数据库的数据处理速度快,一般在10倍以上。通过采用内存数据库,可以极大地缓解传统数据库中大量的磁盘读写操作导致的I/O瓶颈。

当前数据库大多采用C/S(Client/Server,客户机/服务器)模式的进程间通信。传统数据库大多通过管道,本地IPC(Inter-Process Communication,进程间通信)或远程Socket(网络上的两个程序通过一个双向的通信连接实现数据的交换,连接的一端称为一个Socket)形式的通信,在进行批处理操作时需要处理大量的数据,性能消耗明显。因此,在传统场景下需要关注数据库交互的往返次数。而在内存数据库产品中,大多采用直接共享内存的方式,Client通过Driver直接读取共享内存,省去了通信开销,几乎无性能损耗。

从上述对比分析可知,内存数据库相对于传统磁盘数据库具有性能好、响应速度快和处理速度快等优势,但在企业的实际应用中,如果发生故障,这些优势将转变为劣势。由于采用内存数据库支撑的业务场景实时性要求很高,业务中断对于客户的感知影响非常大。例如,某省级通信运营商的实时计费系统使用ORACLE公司的TimesTen内存数据库,在业务试运行阶段故障发生相对较多,但原厂家提供的配套故障诊断工具却很少,出现问题之后需要人工排查处理,业务中断时长在1小时左右,对于实时计费系统是不可接受的。

针对上述问题,该省级通信运营商通过分析与总结,制定出一套完善的智能化的故障处理方法。

3 智能故障处理方法原理及实现

对于企业的核心系统,监控和预警体系配备相对完善,在故障发生时一般能够及时通知运维人员,但运维人员接入系统后对故障原因的分析判断环节将耗费较长的时间。

本文提出的智能化处理方案主要针对故障处理过程中耗费时间最长的故障原因诊断环节进行优化,通过智能判断替代人工故障分析,解决故障处理瓶颈。通过预设方案进行故障预处理,极大地缩短了故障处理的总时长,使业务连续性满足SLA的要求,确保了该运营商实时计费系统上线后的稳定运行。

3.1 智能处理方案的应用场景

本文研究的内存数据库故障智能处理方案,是基于故障重复发生、表象一致、发生具有规律性,且表象能够转化成具体的业务或系统指标的情况。根据这些指标对不同故障有针对性地制定解决方案,做到故障发生时能够智能判断、自动处理。

3.2 模块说明

本文所述的内存数据库故障智能处理方案,主要分为以下5个模块,即事件监控(故障监控)、阈值设置、智能判断、故障处理与实时预警,具体如图2所示:

图2 内存数据库故障智能处理方案主要构成模块

(1)事件监控

事件监控,即故障监控,将各个独立的故障现象转化成事件,对事件实施监控,并通过各种算法对业务、系统的运行信息进行统计分析,转化成可以识别的指标。

(2)阈值设置

本模块主要是根据事件监控转化而来的指标信息,结合故障及过往积累的知识库,预设指标阈值,供智能判断模块进行处理。该阈值可以根据实际情况进行调整。

(3)智能判断

智能判断模块根据事件监控模块获取的指标信息与阈值设置模块设置的阈值进行对比,并根据比对结果选择不同的故障处理程序。

(4)故障处理

故障处理模块调用智能判断模块并进行故障处理的相关程序,这些程序根据特定的故障及处理过程编写。

(5)实时预警

实时预警模块是将整个智能处理过程的相关信息进行实时展现与通知的模块,主要将故障发生、智能处理过程信息、结果信息等发送给相关处理人员,便于跟踪故障处理过程。

3.3 算法流程描述

各个故障表象在“事件监控”环节被转化为事件,并根据具体的业务算法、系统运行信息生成体现故障的具体指标。“智能判断”模块会根据事件监控模块获取的指标信息与预设的阈值进行对比,并根据对比的结果选择相应的故障处理程序,完成故障的智能处理。从“智能判断”模块开始,会将相关的处理信息通过“实时预警”模块告知相关维护人员,从而便于维护人员跟进故障的处理,并实时告知整个处理过程。

整体处理流程如图3所示:

图3 整体处理流程

3.4 智能处理方案的具体实现

下面以一个TimesTen内存数据库承载的实时计费系统故障为例进行说明。该案例属于数据库统计信息异常引发的故障。由于实时计费系统的业务特性,在内存数据库中的统计信息与业务表的实际数据量偏差大于30%的情况下将会出现异常,继而引发业务系统故障。

本案例共分为2个事件,第一个是CPU使用率,第二个是离线话单率,以下结合图4来阐述具体的实现方法。

图4 计费系统TimesTen统计信息异常故障智能预警流程

(1)将故障现象进行分析、总结,并转化成事件监控。

当前已经收集和整理了2个表象事件:

1)CPU使用率;

2)离线话单率。

(2)将事件表象的故障阈值进行预设定,并随后续业务运行情况优化调整。

根据当前表象事件,故障阈值的预设定如下:

1)CPU使用率预设定为80%,业务运行正常的情况下,CPU使用率小于80%。

2)离线话单率预设定为10%,业务运行正常的情况下,离线话单率小于10%。

(3)根据事件故障的发生进行第一次智能处理。如果CPU使用率或离线话单率超过了预设阈值,在未做其他系统变更的情况下,可以确定为中间临时表,统计收集不准引发故障。立即进行中间临时表统计信息收集,中间临时表数据一般小于30万行,故所需执行时间较短,一般可在5分钟之内完成。

(4)完成了第一次智能处理5分钟之后,再次对CPU使用率和离线话单率进行统计分析。

(5)由于第一次处理只是完成了中间临时表的统计收集,不排除业务突然对其他非临时表做了大量的数据变更。因此,如果第一次处理后未能修复故障,则应在此时立即实施全库统计收集,进行第二次的智能化处理。全库统计收集一般会在30分钟内完成,但30分钟的处理时长对于实时计费系统来说仍不可接受,因此需要立即发出预警,通知运维人员同步处理,缩短故障处理时间。

(6)在全库统计收集完成之后,如果故障仍未解除,则可判断故障由其他因素引发,必须由维护人员介入处理,此时需要再次发出告警,并提高告警级别。

4 实践效果分析

通过该方案在实时计费系统运维中的应用,减小了故障发生的频率,并且使故障的解决时间基本控制在5分钟之内,相较于传统的故障处理时长减少了5倍以上。上述实时计费系统没有再次出现由于内存数据库统计信息异常等过往故障引发的长时间业务中断。

通过不断的运用、总结与完善,该方案的应用使人力、物力及风险方面都得到了很好的控制,有效提高了系统的可用性。

从图5的分析结果可以看出,2010、2011年故障平均处理时长在25分钟-30分钟,2012年开始推行本文提出的处理方法并不断完善以后,同类故障处理时长明显下降。

图5 2010-2015年内存数据库故障平均处理时长统计图

5 结束语

本文以基于内存数据库的故障智能化处理方案应用场景为例,介绍了该方案的实现原理以及处理流程,并针对方案涉及的核心功能模块进行了详细阐述。通过分析一个基于TimesTen内存数据库的某实时计费系统运维实践证明,采用该方案对业务系统的故障进行实时监控、智能判断、自动处理能够有效提高数据库及业务系统的稳定性与业务连续性。本文的解决方案也可应用于其他内存数据库产品的故障处理,为故障处理从人工处理向自动化、智能化处理的思路转变提供了参考。

参考文献:

[1] 王珊,肖艳芹,刘大为,等. 内存数据库关键技术研究[J]. 计算机应用, 2007,27(10): 2353-2357.

[2] 蔡侠. 利用TimesTen内存数据库搭建高可用性的电信IT系统[J]. 福建电脑, 2012(6): 134-136.

[3] 曾超宇,李金香. Redis在高速缓存系统中的应用[J]. 微型机与用, 2013,32(12): 11-13.

[4] 哈索, 亚历山大 蔡尔. 内存数据管理[M]. 2版. 北京: 清华大学出版社, 2012.

[5] 陆慧娟,徐展翼,高志刚,等. 嵌入式数据库原理與应用[M]. 北京: 清华大学出版社, 2013.

[6] 李国徽,杨进才. 内存数据库查询优化[J]. 华中科技大学学报, 2003,31(4): 21-23.

[7] 杨武军,张继荣. 内存数据库技术综述[J]. 西安邮电学院学报, 2005,10(3): 96-99.

[8] 刘云生,吴绍春. 一种实时内存数据库组织与管理方法[J]. 计算机研究与发展, 1998,35(5): 469-473.

[9] 杨艳,李炜,王纯. 内存数据库在高速缓存方面的应用[J]. 现代电信科技, 2011,41(12): 59-64.

[10] 甲骨文软件系统有限公司. Oracle TimesTen In-Memory Database Documentation[EB/OL]. (2015-08-01)[2016-04-26]. http://docs.oracle.com/cd/E21901_01/index.html.★