要闻

智能电网海量数据实时搜索技术研究

2017-02-23 15:19:43 电力信息与通信技术

摘要:为满足智能电网对海量状态监测数据搜索的实时性要求,文章结合智能电网海量状态监测数据特点,提出一种分布式实时数据库动态索引技术。将NoSQL数据库的分布式索引技术、并行处理技术以及高可用性技术(HA)与当前多个单体数据库构建的存储网络相结合,采用动态反馈机制自动完成节点间的负载均衡,通过并行计算构造动态索引,实现了电网状态监测点数据在分布式环境中的快速检索与自调整功能,并通过屏蔽底层数据库网络的复杂结构,为用户提供了统一的数据搜索接口。

测试结果表明,该技术满足智能电网业务系统对数据库搜索的实时性和扩展性要求。

关键词:分布式实时数据库;动态索引;动态反馈;负载均衡;高可用性

0引言

随着智能电网的迅速发展,监测系统接收的数据规模和数据种类迅速增加,海量非结构化数据的实时存储成为亟需解决的问题之一。而传统实时数据库索引技术主要针对基于关系型的结构化数据,其构建的非结构化数据索引在性能和数据库资源占用方面都难以满足智能电网的发展需要,尤其在实时性方面[1-2]。研究可支持海量数据存储、分布式冗余备份、可动态调整、高可用性的动态索引技术的呼声日益高涨。用户在高实时性数据访问时,无需了解服务器节点的网络架构及其副本具体存储在哪个服务器上,一旦服务器出现满载、宕机等情况,搜索系统在不中断服务的条件下可自行处理;系统存储总量及实时数据的吞吐能力会随着服务器数量的增加而线性地良好扩展。

为满足智能电网高级应用的实时性要求,研究人员从实时数据库、分布式存储以及索引算法等方面进行了探索,文献[1]针对综合自动化系统中需要大量数据写入的特点,论述了基于内存的实时数据库,通过在内存中将数据缓存,然后写入数据库的方式提高系统的实时性;文献[3]提出了一种基于分布式文件系统的海量电能质量监测数据管理方案,将历史监测数据压缩后存储在分布式异构服务器上,在监测主站保存数据特征值和文件索引,提高了存取效率;文献[4]提出了一种大数据搜索方法,将共享的历史查询结果作为中间结果集,新查询若与历史查询匹配则直接返回请求结果,从而减少了大量的对历史查询的重复计算,提高了查询效率;文献[5]在遗传模拟退火混合算法中融入小生境技术,并对混合算法的相应要素进行改进,基于该混合算法提出了一种改进的分布式查询优化算法,减少分布式数据库查询的代价,提高了查询效率。

总之,当前研究工作侧重于海量数据的组织、存储以及搜索算法的优化和改进等方面,针对的是某一具体应用需要解决的实时性问题,未从智能电网数据存储现状考虑,建立适合电力大数据分析的通用实时搜索系统。

本文所述的海量数据实时搜索系统(LGReal-timeSearch,LGRS)是针对智能电网分析业务自主研发的一套实时的、多维的、交互式的搜索、统计、分析系统,可为电力企业各设备在海量数据的统计分析方面提供完整的实时搜索方案,让万级维度、千亿级数据下的秒级访问成为现实。

1动态索引信息的存储

电力企业的分布式实时数据库索引机制有其特殊性需求[5-6]:状态监测点数据包括简单数值和海量小文件(如谱图或录波数据文件),主要的数据操作是写入和读取;数据的写入者和查询者不必关心系统内部服务器节点的运行状态,如是否有设备存满、失效等问题;数据库系统需要应对海量数据的实时写入,以及为业务系统提供实时的状态监测数据查询。要解决这些特定问题需要数据库系统具有高效的、可靠的动态索引机制。

1.1动态索引存储

智能电网的监测数据规模较大,通常一个市级供电局的状态监测点即可达到百万级别,其数据结构简单,且伴随海量小数据文件。状态监测点数据结构见表1所列。

状态监测数据在写入时,以监测点ID和数据采集时间作为组合主键(Key)建立数据的主索引,状态监测点数量庞大且系统持续不间断地进行采集,根据状态监测数据以监测点为单位的特点,本系统针对监测点和监测数据分别建立动态索引。

1.2监测点动态索引存储

对于监测点索引,参考当前主流大数据分布式存储框架Hadoop采用的一致性哈希机制[7],通过构建一致性哈希表,为监测点分配一个环形的位置空间,构建监测点一致性哈希表的过程如下:

1)获取监测点的ID列表,并对各监测点分配一个权重(该权重值代表该监测点的数据流量大小,根据监测点性质进行估算初值,可在实际运行中调整);

2)对监测点的ID列表按权重值进行排序,然后放入优先级队列,权重值最大的先入队列;

3)从优先级队列中获取监测点ID,并计算该ID的哈希值,获取该监测点ID在一致性哈希表中的位置;

4)循环从优先级队列中取出所有监测点,完成一致性哈希表的初始化;

5)当有新的监测点接入系统时,重新构造优先级队列,按步骤3为新增的监测点选择哈希表中的位置,当位置重复时,将监测点ID加1后重新计算位置;

6)如果有监测点退出时,只需将监测点和哈希表中的位置映射删除即可,该位置将可供新的监测点使用;

7)构造完一致性哈希表后,每个监测点获得唯一位置,这些位置将被映射到具体的数据存储服务器节点。

1.3数据动索引存储

由于监测点数据以时间为单位,持续监测会产生海量数据,同时数据中包含大量的小文件,对这些大规模、结构复杂的数据建立索引,传统的集中式处理方式已无法满足要求。本系统采用分布式计算的方法建立两级索引:首先通过分布式算法在内存中对每个节点的数据建立索引,然后将各个节点的内存索引进行合并,构造大的数据索引,并保存到分布式存储系统的节点服务器。

为同时兼顾系统实时性能以及系统负载承受能力的要求,系统支持在线索引和离线索引2种索引建立方式。

1.3.1实时索引流程

利用实时守护进程创建实时索引(见图1),流程如下:

1)将实时数据(可以是文件,也可以是消息队列的数据)加载到实时搜索中;

2)利用实时数据实时生成索引文件并存放在内存中(内存中的索引数据就可以进行实时查询统计);

3)将内存中的索引数据实时保存在本地存储系统(保存在本地存储系统的数据也可以进行实时查询);

4)实时搜索进程实时地将本地文件合并成大索引,并备份到分布式存储系统中。

1.3.2离线索引流程

离线索引是指对分布式存储系统中的数据文件利用MapReduce并行处理技术创建索引,达到快速创建索引的目的。离线创建索引流程如图2所示。

离线创建索引会调用2次MapReduce过程:第一次利用MapReduce生成内存中的小索引,将内存中生成的小索引合并成分布式存储系统中的小索引;第二次利用MapReduce将分布式存储系统中的小索引合并成分布式存储系统中的最终的大索引。最后,将分布式存储系统中的索引数据同步到各个节点。

1.4服务器集群监测机制

在完成服务器集群和哈希位置的映射后,监测点根据映射将数据写入到对应的集群节点上,分布式存储的高可用机制(HighAvailability,HA)根据副本管理策略,为写入的数据创建多副本并保存到集群的多个节点。在运行过程中,映射需要根据数据库服务器节点的实际情况进行调整,包括服务器集群中节点的运行状态以及集群中节点的变更。

1.4.1服务器节点运行状态监测

服务器集群中节点状态监测采用主从式框架,首先选定2个节点作为监测服务主节点,其他服务节点在进入集群时先在某一台监测服务主节点上注册,完成注册后主节点和该节点建立通信。为保证主节点的可靠性,2个主节点互为备份,两者之间的数据同步由分布式资源协调的HA机制来完成。集群中各节点服务器与主节点之间通过心跳机制周期性地上传节点的负载情况和资源使用情况。服务器集群状态监测主节点将各节点的运行状态信息汇总,并通知动态索引服务,更新一致性哈希表和服务器节点的映射。集群节点状态监测服务结构示意如图3所示。

1.4.2动态索引更新管理

动态索引系统中节点监控服务对监测点索引和数据索引的动态更新过程进行记录。监测点动态索引变更信息包含监测点在一致性哈希表中的当前和历史位置以及该位置对应的数据库服务器节点的映射,查询历史信息的用户可通过历史纪录进行查询;数据动态索引变更信息包含各监测点中监测数据的当前和历史索引文件,用户根据历史节点映射定位到服务器节点后,通过历史数据索引文件快速获取所需的历史数据。

1.5动态索引查询

1.5.1实时读写

当智能电网的业务用户需要将状态监测数据实时写入搜索系统,并对写入的状态监测数据进行实时查询或分析时,动态索引框架通过监测点索引在一致性哈希表中定位到数据库集群的某一服务器节点,然后开始写入数据,当写入的数据要求立即读取时,系统将启动在线索引创建流程,通过并行处理技术(MapReduce)为写入的实时数据在内存中构造索引文件,同时将索引文件保存到分布式存储系统中。用户根据此信息、连接相应的快照服务或查询服务完成写入/订阅操作。数据实时读写流程如图4所示。

1.5.2历史数据查询

历史数据查询通过并行处理框架创建多个查询任务,每个任务首先向动态索引框架中的监测点索引获取监测数据所在的服务器节点,然后再检索数据索引,获取包含该任务时间段内数据的索引文件,然后根据索引文件从数据库服务集群中读取数据,最后通过将多个查询任务进行合并,返回历史数据查询结果。历史数据查询流程如图5所示。

2负载均衡技术

现有的数据库集群中通常采用的负载均衡策略包括轮询均衡、权重轮询均衡、随机均衡以及处理能力均衡等,这些负载均衡算法主要针对结构化且数据量较稳定情况下集群节点的网络带宽和吞吐量的平衡[8-10]。面对智能电网海量状态监测数据的实时读写,由于状态监测节点数据量不稳定,正常状态下只有少量结构化数据(见表1),异常状态下会产生大量的小文件(如谱图或录波文件),且无法准确评估数据量,当这样的监测点规模庞大时,会导致传统的负载均衡策略无法有效衡量集群中各节点的负载能力,导致集群负载失衡,甚至系统崩溃。

同时现有的负载均衡策略为平衡负载,主要通过文件迁移实现,即把负载从一个服务器节点转移到另一个服务器节点中。在状态监测系统中由于数据不稳定,节点间可能会出现频繁的迁移,且迁移的数据量规模较大,不仅影响网络带宽,也会造成索引表不断重建,导致系统资源损耗以及访问效率的下降。

为了解决上述问题,本文设计了一种基于负载预测的动态反馈负载均衡机制。基于负载预测的动态反馈机制示意如图6所示。

基于负载预测的动态反馈机制的核心是负载评估、负载预测和动态反馈负载均衡。该机制根据服务器集群监测服务上报的各节点实时负载情况,结合各节点最近一段时间负载变化情况,对各节点的负载状态进行评估,根据评估结果对节点后续一段时间内的负载情况进行预测,预测结果提交到动态索引框架用于负载策略的动态调整。

2.1负载评价

负载评价模块从服务器集群监测管理模块中获取各服务器节点的CPU、内存、网络、磁盘以及I/O等资源的实时使用情况,负载评价通常采用基于请求的负载评价和基于资源使用情况的负载评价2种方法。由于智能电网状态监测系统中监测点的数据量不稳定,不宜采用基于请求的负载评价方法,故本文采用基于资源使用情况的负载评价。

基于资源使用情况的负载评价流程如下:

1)选择能最大程度体现节点负载情况的指标;

2)由于各节点的系统配置和性能不可能相同,需要对这些指标进行归一化处理;

3)基于归一化后的负载情况指标,建立反映服务器节点性能和时间的负载评价层次模型(见图7);

4)根据层次模型,构建能反映不同节点负载状态的判断矩阵;

5)根据判断矩阵计算出不同负载情况指标对应的负载度量值,负载度量值越大,表示该节点的负载越重,反之负载越轻。当一个新节点加入到集群中时,其负载度量值为0,表示无负载,当节点满载时,负载度量值为1。

2.2负载预测

基于负载情况指标,结合负载评价结果建立基于BP神经网络的负载预测模型,基于BP神经网络的负载预测流程如下:

1)从服务器节点状态监测模块中获取负载情况指标,根据负载评价模块中的方法进行归一化;

2)从负载评价模块获取服务器节点的负载度量值;

3)基于上述负载指标信息,建立BP神经网络预测模型(见图8);

4)将采集到的各节点的负载情况指标输入到预测模型中对BP神经网络进行训练,根据实际运行中负载的变化情况对预测模型进行验证。

2.3动态反馈负载均衡

通过设定负载告警值(本文设定负载度量值为0.6),当某节点的负载评价结果超过该值时,系统启动负载均衡流程,也可按周期定时启动流程,从集群状态监测模块获取节点负载实时信息,对集群节点的负载进行预测,并根据预测结果进行数据迁移,完成节点负载调整。动态反馈负载均衡流程如图9所示。

3高可用(HA)机制

智能电网状态监测领域实时搜索系统的高可用性要求建立高效的副本管理机制。为保证动态索引机制在某个节点出现宕机或异常退出的情况下不影响检索性能,需要对索引文件进行多个备份,以便能快速恢复异常节点中保存的索引文件。

实时搜索系统多重副本机制由分布式协调服务系统通过管理主节点Master来管理多个索引文件的副本,在线或离线方式创建的动态索引文件通过分布式协调服务系统在主节点Master进行注册,Master根据资源调度算法将索引文件分配给多个数据节点进行备份。

当用户访问某一部分数据时,动态索引系统为用户提供某个目标节点服务器来获取数据的索引,如果此时该节点服务器宕机导致索引文件无法正常获取,统一资源调度系统获取到该异常后,通知主节点Master到相关的节点获取该索引文件的副本供用户访问,继续搜索所需的数据,整个过程用户不会受任何影响。同时为保证主节点Master的高可用性,系统也支持对主节点Master的数据进行多副本管理,当主节点因为断电或异常退出时,主节点中保存的副本管理信息可以从该节点的副本中恢复并继续运行。同时,系统的高可用机制还用于状态监测服务的主节点多副本管理。

4基于动态索引的实时搜索系统

4.1实时搜索系统架构

本文所述的智能电网海量数据实时搜索系统基于电力系统现有单体数据库系统和通信网络,构建实时分布式存储系统,其核心技术是利用大数据框架的并行处理技术、分布式资源高可用技术(HA)以及负载均衡技术,实现了数据库系统的实时性、可靠性和高扩展性。实时搜索系统结构如图10所示。

实时搜索系统包含动态索引系统、并行计算模块、负载均衡模块、分布式协调服务模块4个核心模块。

1)动态索引系统。动态索引系统是实现实时搜索的基础,通过建立两级索引机制,实现监测点和数据的双层索引。采用大数据框架中成熟的一致性哈希表,将规模庞大的智能电网状态监测点和现有的数据库集群实现均衡的映射关系,提高各节点服务器的存储效率;引入并行处理框架(MapReduce),针对海量状态监测数据和小文件,建立高效的实时检索文件;通过建立服务器节点状态监测服务,自动适应服务器集群的变化,对监测点索引和数据索引进行更新,并对更新过程进行记录。动态索引系统可以与分布式存储系统的高可用技术结合实现双层检索机制、节点状态监测机制的高可用性。

2)并行计算模块。采用MapReduce并行处理框架解决海量数据索引创建效率低下的问题,同时并行处理框架还为数据实时读取提供并行处理能力,提高了索引文件和数据的检索速度。

3)负载均衡模块。该模块为动态索引框架提供集群节点负载优化策略,通过制定的负载均衡模型,建立动态调整机制,解决了服务器节点运行状态改变或节点数量变化导致的系统性能下降问题。

4)分布式协调服务。该模块主要提供高可用的资源服务,包括构建索引文件和监测服务主节点的多副本管理,保证在服务器集群宕机或异常退出时能够及时恢复数据,不影响系统的正常运行。

4.2实时搜索系统分析

本文所论述的实时搜索系统(LGRS)是基于业界大数据Hadoop框架开发的分布式数据实时搜索方案,底层存储基于分布式数据库系统改造优化,支持不同大小的文件并发存储访问,并实现了存储容量的横向扩展;数据搜索使用并行计算,支持字段搜索、统计和全文检索[11-12],支持实时和离线创建索引,充分利用整个集群的并行计算能力创建索引文件并搜索数据,在搜索时能确保数据在毫秒级别内返回;对传统的数据检索方案进行了改造,增加了动态自适应功能以及并行检索和合并功能。实时搜索系统调度流程如图11所示。

5系统性能测试

测试所用数据表Tb_flow有48个属性,测试数据共5.6亿条,包含14天的数据,数据以天为分区。

测试结果为5次查询所求得的平均值,并且测试采用的是离线索引。

用例#1:统计单个分区数据属性值,平均用时0.016s;

用例#2:统计整张表分区数据属性值,平均用时0.108s;

用例#3:查询单个分区输出一个属性值,平均用时0.053s;

用例#4:查询单个分区所有属性值,平均用时0.184s;

用例#5:根据一个过滤条件输出一个属性值,平均用时0.063s;

用例#12:根据分区进行条件过滤或输出所有属性值,平均用时0.263s;

用例#13:根据8个维度进行过滤输出一个属性值,平均用时0.026s;

用例#14:根据8个维度进行过滤输出所有属性值,平均用时0.249s;

用例#15:根据8个维度进行统计,平均用时0.352s。

测试用例消耗时间统计曲线如图12所示。

结果表明:在5.6亿条数据量下,10个维度随意组合,输出单个属性平均所用时间约0.032s,输出所有48个属性平均时间约0.352s。

6结语

本文根据智能电网状态监测数据的特点,在充分利用现有结构化数据库的基础上,通过建立动态索引机制实现了状态监测数据的实时读写,同时实现了系统的高可用性和高扩展性。基于该机制建立的分布式数据库系统能够自适应服务器集群中节点的增减,并动态更新索引,保证状态监测数据接入系统能自动寻找到最合适的服务器节点,均衡各节点服务器负载。在提升了智能电网状态监测系统整体性能的基础上,为终端用户屏蔽了数据持久层的复杂组织结构,用户只需针对一个统一的分布式数据库进行数据读写,便于系统的运行维护和功能扩展。测试结果表明,改进后的实时搜索技术能够满足对智能电网海量数据读写的实时性和可靠性要求。

作者:吴秋莉,郭丽娟,吕泽承,邬蓉蓉(广西电网有限责任公司 电力科学研究院, 广西 南宁 530023)

北极星智能电网在线官方微信

相关推荐

加载中...