基于Web Service的油气田信息服务构建

2020-01-13 08:19范伦杰张余强罗彬彬
智能计算机与应用 2020年1期
关键词:传输数据库模块

范伦杰, 张余强, 罗彬彬

(1 四川大学 电子信息学院, 成都 610064; 2 成都西图科技有限公司, 成都 610065)

0 引 言

随着油田信息产业的发展,油气田管理人员需要完成对中石油数据库信息的统一化管理工作。已有的油气田数据是以各种方式分散在各台服务器上存储起来的,需要一个统一的服务去支持第三方开发组件调用,防止第三方机构构建的展示平台污染数据源,配有对第三方的身份信息验证功能,保证信息的数据安全。基于以上需求,调研了网络上常见的数据资源的共享方式,其中包括公网上广泛流行的Restful微服务架构,较为传统严谨的Web Service数据传输服务。Restful架构仅是基于Http协议来设计运行,相较而言Web Service具有更严格的语义描述,对数据的交互有着严格的WSDL文件描述。相对于REST架构来说,虽然缺少了系统的延展性和伸缩性,但是在安全和规范方面更为标准。因此采用Web Service协议来实现数据的共享[1]。

1 需求分析及服务总体架构设计

本次研究中,根据现有数据库中的数据表结构,将数据分为5个子模块来传输,分别为:生产动态、生产成果、储量成果、井筒曲线和统计卡片,不同勘探生产模块,存储的主要信息不同。各个模块的主要数据内容见表1。

表1 数据模块及其主要内容

在梳理阐述前文功能模块的前提下,还需要设计权限控制、文件服务功能。所有油气田信息的传输均以Web Service协议作为基础,而在此通用的数据交换协议下,拟对协议细节进行细化定制,同时构建数据方和需求方的交互语言格式,另外还要规范各个子模块的交互进程。系统功能模块的整体设计结构即如图1所示,不同的项目子结构,需要编写大量的业务代码以及封装公用逻辑业务,成功运行后就会展现出一个完整的项目服务。

图1 Web Service 总体功能模块

2 功能模块设计和实现

各个功能模块都依赖于Web Service实现的远端调用。Web Service服务主要由WSDL文件进行描述, WSDL文件将服务描述为一系列request、response、绑定参数,绑定的数据传输协议的集合[2]。WSDL以XML格式进行描述。通过XML格式的自描述特性,将Web Service各种端口的各方面描述信息和数据传输协议进行了规范化加工。具体的WSDL设计端口如图2所示。由于WSDL文件的语义描述准确,客户端在通过网络传输获得WSDL文件后,即可依此开发Web Service客户端。选择Spring集成Apache CXF框架是目前最为普遍和成熟的Web Service客户端开发方式。

图2 WSDL端口设计图

CXF是Apache软件基金会开源的顶级孵化项目Celtie和Xfire的结合,而且高度兼容现有的主流后端开发Spring框架。通过配置Spring.xml文件,注册CXF的代理类到Spring IOC容器中,即可做到JAX-WS协议的部分客户端代码自动生成,代理类的设计主要针对着request请求中SOAP协议自动化拆包和封包操作,这也极大地简化了开发人员的工作量[3]。

2.1 权限验证模块分析设计

油田权限认证信息存放在本地的数据服务器上。利用Web Service协议进行权限校验前,在数据调用方访问数据库时,需要加上一个对于数据调用平台的身份验证功能,该功能不能是利用IP地址方式对来访者进行限制。参考常见的网络鉴权思路,在服务端依据用户信息生成Token,再依据Token进行身份验证[4]。

在Web Service平台下,数据绑定的消息格式一般都是SOAP。Token可以编码存放在SOAP请求中,但是由于在CXF框架中,SOAP拆包封包等工作是由自动生成的代码代理实现,需要在SOAP包中添加自定义Token就需要创建自定义SoapAuthHandler类实现SOAPHandler接口,重写其中的handleMessage()方法并配置该过滤类在Spring.xml文件中。

在handleMessage()方法中,需要依据Token值和命名空间namespaceURI,生成QName,将其对象序列化,以字符串的形式添加到SOAPHeader中,并且设置过期时间为6个小时。本次研发的Token生成方案的原理公式可写为如下形式:

Token=SHA512(SHA512(UserInfo)+salt).

(1)

由式(1)解析可知,该方案就是依据SHA512哈希算法对用户信息进行加密,加盐,再加密生成[5]。

通过上面的哈希算法,对UserInfo信息进行加密传输,salt是以一定函数对应于UserInfo的字符串。如此一来,即使用户Token被截取,也无法逆向SHA512哈希函数获取UserInfo。研究给出的总体验证流程如图3所示。

在后续访问数据信息接口时,如果出现Token过期的情况,重新验证即可。该方案可以避免每次请求数据都发送用户名和密码,避免监听程序发现数据包中的身份信息,而且对于服务端而言,对该Token进行验证和比较后就能够确定访客身份信息。

2.2 数据传输模块设计

数据传输需要设计各种有针对性的WSDL中的模块。对于调用方而言,需要不同形式数据。参考常见的数据库查询语句,一次数据库查询就要制定准确的数据库表、条目数、排序方式、分页条件、字符串匹配等参数。把数据库中的数据集成到第三方页面中去,可选择的方式就包括将这些参数存储到XML文件中进行传输。

图3 Web Service身份验证流程图

相较于JSON文件,XML文件信息较为繁琐,在传输相同信息量的文本时会增大带宽占用,因此在数据库参数传输设计上本文选用了JSON格式作为替代。

研究可知,JSON(JavaScript Object Notation) 是一种轻量的数据交换格式。这是 ECMAScript的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。具有清晰明了的层次结构和逻辑关系,对其进行序列化和反序列化也有很多成熟的工具可供调取使用。

将JSONObject对象序列化后,将字符文本封装到SOAP包的Envelope消息体内,而后再将该SOAP包封装到Http请求中完成数据的交换。以上思想,借鉴了网络传输过程中的5层传输模型,一层一层地封装信息,保证下层协议对上层协议的穿透性。

对于每个模块的不同数据库表,定义不同的ServiceID号、条目数以及排序方式等参数信息,对于查询SQL中较为复杂的级联查询,在JSON对象中通过在键值对的键值中再次包含一个JSON对象来实现。这种参数传递方式,不会受到传统的函数调用过程中函数参数表参数个数的限制,也能够对所要表达的数据请求含义有着明确的表示。

本文研发设计的JSON文本信息示例详见如下。

{serviceID:1535,

pageIndex:1,

pageSize:50,

search:[{ field:”RQ”,

type:2,

condition:7,

value:["2008-01-01"]

},

{...}],

sort:[{field:”BH”,order:0},

{...}] }

该示例明确描述了需要信息的参数。在服务端SOAP拆包获取JSON字符串文本后,对其进行JSON反序列化和文本提取,提取出关键的查询信息后拼接SQL。在数据库命令控制台中执行SQL获得Result结果集,对结果集进行再次封装,存入SOAP Body中返回给Ajax请求。前端在HTML页面中对Ajax请求的返回结果进行局部重新渲染,保证页面的展示效果。至此,数据传输后页面展示的部分结果图即如图4所示。

图4 数据结果展示页面

2.3 文件服务

油田系统已经存储的数据文件格式多样,包括大量的常规Office文档、油气田专用的716格式文件,地理信息ArcGIS文件和各种格式的图片文件。考虑到其与数据库内规范化的数据不同,本文就研创开发了一套FTP服务运行在文件存储的服务器上,使用FTP服务器进行文件下载。同时为了能让第三方开发通过Web Service方式获得文件,在Web Service接口中定制了一个文件下载的接口,该接口以FTP路径为参数,先在Web Service服务器以FTP方式下载文件到本地服务器,再以字节流的方式将数据发送到调用方。当调用方获取到文件后,对各种格式文件可以做相应处理,图片可直接嵌入Img标签内进行预览,Office文档可在文件格式转码后在Web浏览器中用PDF.JS插件进行预览,ArcGIS文件信息可用于开发三维地形服务等。

3 接口压测

在进行了前文各项子模块的设计后,接下来就要对每个模块进行压力测试。由于Web Service服务器的承载能力受到多种因素限制,包括硬件性能、网络IO吞吐能力、操作系统、工业软件的架构设计等等在内,后续还需对该工程的具体负载能力进行科学客观的评估。

针对Web Service的接口服务的压力测试有多种常用工具,诸如Apache JMeter和SOAPUI等软件,也可以直接用JAVA网络IO请求写代理脚本去进行压力测试[6]。在全面调研过后,最终选取JMeter的压力测试工具集测试,相对其它几种方案更为简洁,具有直观的图形化界面和完备的参数输入。本实验的硬件条件为CPU I5-4460 3.20 GHz,16 GBDDR3内存,WIN10企业版操作系统,100 M局域网。测试时,先配置Http请求头的参数,再将请求的SOAP消息体拷贝到JMeter的Http请求的body中,发送请求给Web Service接口。

本次研究中,设置并发的线程数为500,Ramp-Up时间为1 s,用来模拟同时有500个人去访问同一接口,并设置请求Loop次数为10,预估为5 000个请求样本。由于部分的请求被服务器端阻塞,对应的Jmeter请求线程也被暂停了,实际统计出的样本数量为4 481个。实验测试结果数值见表2。

表2 请求响应汇总表格

分析表2数据可以看出,一共发送了4 481个Http请求给Web Service接口,有着3.59%的请求错误率,平均能在2 s左右获得正确的反馈数据。90%百分位的值在高强度并发面前也出现在合理范围内,99%百分位因为属于错误响应,33 s的响应时间已经不可接受。虽然传输会出现错误,但是通过合理的设计请求重传机制,依旧能够保证数据的正确性,满足现有的调用需求。

4 结束语

本文针对油田数据信息的展示以及安全需求,采用Web Service协议平台设计架构,设计并实现了一套基于该平台协议的数据传输系统。本次研究的成果主要在于成功利用该自描述协议完成了油气田勘探生产环境下的生产数据传输。其中包括从原始数据库中提取信息进行封装,对接口模块的规划形成完备的WSDL文件,对接口参数的合理设计、统一的权限管理以及SOAP拆包封包等技术的客户端/服务器端实现。该方案不仅能够满足石油公司的需求,在实际的生产环境中,也可以按照该方案修改某些内容扩大使用场景,将该方案移植到其它的需求环境中去。因此该方案具有一定的工程效益。

猜你喜欢
传输数据库模块
28通道收发处理模块设计
“选修3—3”模块的复习备考
特斯拉的接班人:电力可以通过空气传输
广播电视信号传输的技术分析
浅谈垂直极化天线在地面数字电视传输中的应用
4K传输
数据库
数据库
必修模块相关知识过关训练
数据库