曾楠, 陈志刚 , 窦昊翔, 姚剑, 郭爱群
(1. 国家电网公司,北京 100017; 2. 国网江苏省电力公司, 南京 210029; 3. 国网江苏省电力公司 信息通信分公司, 南京 210013; 4. 北京友友天宇系统技术有限公司, 北京 100022)
为了构建企业全业务统一数据中心统一数据访问层,如图1所示。
图1 全业务统一数据中心示意图
需要解决以下关键问题:
统一数据访问层需要实现各数据源的数据一发双收[1]、跨库检索等技术难题,然而目前这些核心技术更多在学术界进行探讨,在工业界也只是处于研究阶段,没有成熟应用的经验。
针对上述背景,本文将围绕国网全业务统一数据中心应用需求,结合江苏电力相关公司多年来的一体化平台及数据中心建设经验,开展省级电力公司全业务统一数据中心统一数据访问层架构设计研究[2]。针对新的平台能力要求开展关键技术研究[3],尤其需要重点关注数据一发双收、跨库检索等技术难点。
对于企业数据的应用,主要分为数据仓库建设和大数据应用建设两大阶段。在数据仓库[4]方面,IBM、Oracle、Sybase、CA、NCR、Informix、Microsoft和SAS等有实力的公司相继通过收购或研发的途径推出了自己的数据仓库解决方案。BO和Brio等专业软件公司也在前端在线分析处理工具市场上占有一席之地。根据各个公司提供的数据仓库工具的功能,可以将其分为3大类:解决特定功能的产品(主要包括BO的数据仓库解决方案)、提供部分解决方案的产品(主要包括Oracle、IBM、Sybase、Informix、NCR、Microsoft及SAS等公司的数据仓库解决方案)和提供全面解决方案的产品(CA是目前的主要厂商)。
在大数据应用[5]方面,互联网企业龙头与传统 IT 巨头通过投资并购不断加强大数据领域布局,初步形成大数据产业链闭环,并在各行业拓展应用。谷歌、亚马逊、facebook等互联网企业龙头和Oracle、IBM、微软等传统IT 巨头,通过投资并购的方式不断加强大数据领域布局,初步形成贯穿大数据产业链的业务闭环,并在各行业拓展应用。据统计,2015年全球大数据市场规模已达到420亿美元。
在数据分析[6]方面,阿里巴巴自主研发的ODPS(Open Data Procession Service)大数据存储、分析、展示平台,实现了在短时间内构建分析、挖掘、预测等更有价值的业务应用。
统一数据访问层提供一个统一数据访问组件(统一数据访问接口,以下简称SDK)作为统一的数据访问API,应用系统提供自身在统一数据访问层的注册身份,以此身份获取分配的可访问数据资源,进行数据库连接[7]与数据访问,非授权访问将被统一数据访问平台拦截。统一数据访问层作为统一的数据访问入口,代理所有应用的数据访问请求,对于单数据源[8],支持采用穿透的方式进行访问,以保障数据访问效率;对于多源访问,需要连接代理访问服务,减少不受安全监控情况下的数据源访问;对于跨数据源访问[9],由分布式数据查询引擎(DQE,以下简称查询引擎)进行分布式处理并将数据返回给客户端。统一数据访问层对元数据进行统一管理,支撑数据架构的落地,以此推动数据中心的建设,同时提供数据权限管理及数据访问审计等功能,有效控制数据非法访问风险。统一数据访问层提供系统管理组件,完成对构成平台相关软件的安装、部署、配置、监控等功能,提供可视化管理功能。物理系统(即应用系统)直接或通过代理访问服务与统一数据访问组件SDK通信,然后经过统一数据访问平台中逻辑数据库实现与业务系统后端物理数据库之间的通信。如图2所示。
围绕统一数据访问的需求,研究相关关键技术[10],主要包括:统一元数据管理、SQL请求分析技术、SQL方言转换技术、分布式查询技术、多源联合查询技术、分布式一致性技术、领导者Leader选举技术、连接代理技术,并研发如下相关模块。
统一元数据管理提供对数据源的视图、状态;查询引擎工作状态;应用注册信息以及对应访问权限等数据的管理。统一元数据管理分为元数据采集和数据管理服务两部分。元数据采集主要是对数据源元数据、数据库状态、查询引擎状态等进行采集;数据管理服务主要包括应用管理、库表管理、状态管理、权限管理、性能管理。
图2 统一数据访问层示意图
SDK提供标准的JDBC驱动,是与上层业务应用对接的唯一接口组件。组件运行时嵌入在业务应用等模块内部。业务应用在启动时,会进行初始化,初始化是一个应用认证的过程,向统一元数据管理获取该业务应用需要的元数据信息。
在运行过程中,如果该应用对应的各类元数据发生变化,该组件会根据统一元数据管理发送的变更通知,完成元数据的实时变更,从而快速响应SQL请求的执行逻辑。SDK逻辑架构示意图如图3所示。
图3 SDK逻辑架构示意图
统一数据访问组件SDK提供SQL解析、连接管理、路由管理、权限管理、驱动管理、负载管理、容错管理等功能模块。
分布式数据查询引擎主要功能是提供跨库多表关联分析查询,并能完成对复杂SQL查询请求的分布式执行。
分布式数据查询引擎模块架构图,如图4所示。
分布式查数据询引擎包括协调者、执行者、数据源适配器三部分。其中协调者、执行者在没有任何SQL请求的情况下,角色是一致的(即可互换的),都是执行者;一旦某个SQL请求发送到某个执行者查询引擎中,该执行者的角色就自动变成了协调者;协调者把指令发送到多个执行者上进行分布式查询,协调者将结果进行最终合并并返回给客户端(SQL请求者)。
为了在某些场景下,应用能够在访问数据源数据时还能更高级别保证整个数据源的安全,支持业务应用通过代理访问底层数据。
图4 分布式数据查询引擎模块架构图
代理访问服务架构示意图,如图5所示。
图5 代理访问服务架构示意图
代理访问服务包括JDBC协议和RESTful API两种方式。其中JDBC传递的是SQL语句,由SDK发出;RESTful API是指定查询的对象和条件,在代理访问服务中配置查询语句,以进行行级的数据权限控制。
通常是基于分布式消息组件,将采集器、状态服务器以及SDK连接在一起。有几个关键的群组构成:
1) 采集群组,即所有的采集器和状态服务器都会在对应的群组中。
2) 选举群组,当有多个状态服务器时,需要选举一个主状态服务器完成工作,同时当主失效后,能够快速的再选举一个主状态服务器。
3) 通知群组,当数据发生变化时,会在通知群组通知给相关者。
在平台中,如何对SQL请求语句进行深度辨识,是分布式数据查询引擎、SDK都需要解决的问题,也是解决应用到数据源的高性能访问的关键所在。
SQL请求分析技术通常采用自有词法、语法分析,对SQL进行深度识别与解析,完成对SQL请求中的操作、对应库表、查询条件(特别是针对数据所在位置的特征)做标识,并生成执行计划树。
在平台中,为了解决多种数据库同时能够被应用进行访问(包括单库或者跨库来联合查询),对数据库SQL方言的识别以及转换是关键。
SQL方言转换技术包括两个具体技术:
1) 库表映射技术,能够很灵活的将不同数据库的库表定义转换为平台的结构。
2) 字段类型映射技术,对不同的数据类型(特别是复杂数据类型)之间进行转换定义。
分布式查询技术是对一个查询请求经过预处理、任务调度、结果汇总等多个步骤以后,满足查询请求的实时性的一系列技术。
预处理需要针对执行计划树并结合实际的数据源的特征(利用HDFS、MongoDB等分布式存储短路途特征),生成任务的一系列过程。
任务调度是将任务分配到具体的执行者执行,任务会根据数据源的Native数据访问方式(比如HDFS直接访问数据块,而非经过HDFS API去访问数据),快速加载数据并进行执行运算。
结果汇总会根据具体的每个子任务的结果,快速的进行结果集综合,以满足返回业务应用最终请求结果的过程。
查询引擎满足同一个请求在不同的数据库源上进行联合查询功能,同时对应用屏蔽这些数据库的差异。主要由如下措施完成:
1) 数据库差异屏蔽,分布式数据查询引擎利用数据库驱动和统一的数据Schema映射技术。
2) 查询引擎利用生成的执行计划树,在不同的节点上对不同的数据源分别做查询和处理,并返回综合结果。
在统一元数据管理中,各子系统之间需要进行消息的传递,对于分布式系统,怎样保证子系统之间消息传递的一致性是保证系统正确运行的关键问题。
群组通讯是分布式消息组件提供的多种消息传递机制中的一种,它能够提供成员之间发送消息(或数据)的强一致性(各个成员要么都收到、要么都不会收到)、强顺序性(各个成员收到消息的顺序是完全一致的)以及成员之间的状态稳定可靠。通过这些功能,可以解决上述在本系统中需要解决的各个问题。
统一数据访问中状态服务器需要采用集群部署解决单点故障问题,但随之引入了新的问题:数据库状态采集器采集的状态数据会通过分布式消息组件将状态数据发送给状态服务器,状态服务器负责将这些数据进行持久化,为了解决一致性问题,必须由一个状态服务器负责处理。
Leader选举机制负责解决这个问题,该机制将选择一个状态服务器作为Leader,然后由这个Leader负责执行消息的处理。
对于数据访问接口,使用连接代理技术在业务应用和物理数据库之间建立一个桥梁,连接代理作为接口对外提供唯一的服务,业务应用只需关注连接代理即可,不需关注实际执行的物理数据库。
连接代理根据业务应用执行的SQL请求动态管理物理数据库的连接,一个连接代理可同时访问一至多个物理数据库,SDK将根据SQL路由算法动态决定 SQL执行的物理数据库。
本文重点对现有结构化数据中心、非结构化数据中心、GIS/空间数据中心、海量/实时数据中心、大数据平台、业界其他主流数据平台进行研究,提出了统一访问层架构设计,对相关关键技术进行详细的研究,可以实现电力企业数据的管理及统一访问,能够在很大程度上的解决业务协同过程中产生的信息共享不足,数据实时性不强等问题。整合并细化出省级电力公司全业务统一数据中心统一数据访问层的技术能力。
[1] 赵睿, 舒一飞, 马银环,等. 用电信息采集“一发双收”功能的研究与实现[J]. 宁夏电力, 2015(3):7-11.
[2] 苏大威, 李云鹏, 黄小鉥,等. 配用电统一数据采集与信息支撑平台架构设计[J]. 电力自动化设备, 2014, 34(9):166-172.
[3] 唐跃中. 数字化电网若干关键技术研究[D]. 杭州:浙江大学, 2010.
[4] 李晶晶, 陈侃, 徐丹. 数据仓库与数据挖掘在行业化数据中心的应用分析[J]. 数字通信世界, 2015(5):64-67.
[5] 刘强. 数据仓库及数据挖掘技术的应用[J]. 电子技术与软件工程, 2016(1):192-192.
[6] 冯永强, 张良, 冯怡,等. 大数据应用的现状与展望[J]. 信息化建设, 2015(12):292.
[7] Poirier S, Buteau A, Ounsy M, et al. COMMON DATA MODEL ACCESS; A UNIFIED LAYER TO ACCESS DATA FROM DATA ANALYSIS POINT OF VIEW THE GENESIS OF THE PROJECT[J]. Biologie Aujourdhui, 2012, 207(4):291-307.
[8] Liu B, Zhu Y, Wang C, et al. A Versatile Event-Driven Data Model in HBase Database for Multi-source Data of Power Grid[C]// IEEE International Conference on Smart Cloud. IEEE, 2016:208-213.
[9] Li Z, Zhu Z, Xie G, et al. Fast and proximity-aware multi-source overlay multicast under heterogeneous environment[J]. Computer Communications, 2009, 32(2):257-267.
[10] 耿玉水, 寇纪淞. 云计算下异构数据集成模型的构建[J]. 济南大学学报(自然科学版), 2012, 26(4):57-62.
[11] 陈升. 统一时空电网数据模型与访问技术[J]. 计算机系统应用, 2016, 25(12):210-214.